Nimbus özelliklerine rağmen bir Java uygulamasını WindowsLookAndFeel'den Nimbus'a geçirmek için çalışıyorum. Kullanıcılarım genelde Nimbus LaF gibi ama bazı detayları beğenmedim, bazıları bu sitede daha önceki sorulara cevap vererek değiştirdim. Örnek: LeafIcon, ClosedIcon ve OpenIcon'ları Windows LaF'dan (beğendikleri) kopyaladım ve LaF'lerin hoş bir bileşimi için bunları Nimbus versiyonunda kullanıyorum.Nimbus LaF, JTree düğmesinin nasıl işlendiğini değiştirme JTree düğümü vurgulanıyor
Son bir (?) Problem üzerinde kaldı.
Uygun düğüm ekranlarını oluşturmak için alt Sınıflı bir DefaultCellRenderer'a sahip bir JTree'im var. Bu WindowsLookAndFeel altında çalışıyor.
Sorun: Düğüm seçildiğinde, WindowsLaF altında düğümün metni vurgulanır ve efektin anlaşılması kolaydır. Düğüm seçildiğinde Nimbus altında, vurgulama, ağaç penceresinin genişliğini (yalnızca metnin genişliği değil) çalıştıran (oldukça koyu) bir renk çubuğuyla yapılır ve efekt rahatsız olur. Yani: Sadece Nimbus LaF'de vurgulanan JTree düğümünün WindowsLaF tedavisini istiyorum (yani, yalnızca arkaplanın genişliğini renkli bir şekilde ve tercihen daha iyi bir renkte seçebiliyorum). Şüpheliyim ki, doğru sıralı ressamı "Tree: TreeCell [Odaklı + Seçili] .backgroundPainter" a atamam gerektiğinden, nasıl yazacağımı bilmiyorum.
Öneriler en çok hoş geldiniz.
DÜZENLEME
Java 7 ile garip seçilen düğüm vurgu bakın!
public class TreeBorder {
public static void main(String[] args) {
try{
for(UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch(Exception e) {
e.printStackTrace();
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(getJTree());
f.pack();
f.setVisible(true);
}
private JTree getJTree() {
JTree jTree = new JTree();
jTree.setCellRenderer(new LocalRenderer());
return jTree;
}
});
}
private static class LocalRenderer extends DefaultTreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasfocus) {
DefaultTreeCellRenderer result = (DefaultTreeCellRenderer)super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasfocus);
if(true) {
result.setFont(new JLabel().getFont());
Icon icon = UIManager.getIcon("FileView.floppyDriveIcon");
result.setIcon(icon);
}
return(result);
}
}
}
Gönderiye ek olarak: elbette bir ressamdan daha kolay bir yol varsa, bu daha da iyi olur. Tree.selectionBackground'u daha az dikkat dağıtıcı bir renge dönüştürmeyi denedim, ancak Nimbus modifikasyonu yok sayıyor. – user1359010
Yorumuma ek. Tree.selectionBackground'u doğrudan ayarlayamazsınız, ancak bu renk numbusSelectionBackground'dan türetilmiştir, bu nedenle nimbUID.put ("nimbusSelectionBackground", yeni ColorUIResource (205,208,216)); İstenen efektin bir kısmını üretir (daha hafif bir Tree.selectionBackground). Yine de sadece metin yerine vurgulanmış bir satır elde etmek, bu yüzden bir ressamın yardımı yine de takdir edilecektir. – user1359010
@oliholz lütfunu yorumlayabilir misiniz, eminim bu soruyu asla göremedim, çünkü klasik Renderers kavramının aşırı yüklenmesi Nimbus özellikleri ve çoğu durumda – mKorbel