पर प्रकाश डालने वाले जेटीरी नोड को कैसे संभाला है, मैं निंबस फोइब्ल्स के बावजूद विंडोज़ लुक एंडफेल से निंबस तक जावा एप्लिकेशन को बदलने के लिए काम कर रहा हूं। मेरे उपयोगकर्ताओं को निंबस लाफ की तरह समग्र मिला लेकिन कुछ विवरण पसंद नहीं आया, जिनमें से कुछ मैंने इस साइट पर पिछले प्रश्नों से परामर्श करके बदल दिया। उदाहरण: मैंने विंडोज़ लाफ (जिसे वे पसंद करते हैं) से लीफआईकॉन, क्लोज़ड आइकॉन और ओपन आइकॉन की प्रतिलिपि बनाई और उन्हें लाफ्स के अच्छे संयोजन के लिए निंबस संस्करण में उपयोग किया।बदल रहा है कि निंबस लाफ़ ने
एक आखिरी (?) समस्या पर अटक गया।
मेरे पास उपयुक्त नोड डिस्प्ले बनाने के लिए एक उप-वर्गीकृत DefaultCellRenderer के साथ एक JTree है। यह विंडोज लुक एंडफेल के तहत ठीक काम करता है।
समस्या: विंडोज़एफ़एफ़ के तहत जब नोड का चयन किया जाता है तो नोड का पाठ हाइलाइट किया जाता है, और प्रभाव को समझने में दृष्टिहीन होती है। निंबस के तहत जब एक नोड का चयन किया जाता है तो हाइलाइटिंग (काफी काला) रंग की एक बार के साथ किया जाता है जो पेड़ की खिड़की की चौड़ाई (पाठ की चौड़ाई नहीं) चलाता है, और प्रभाव विघटित होता है।
तो: मैं बस निंबस लाएफ़ में जेटीरी नोड हाइलाइटिंग के विंडोजएलएएफ उपचार चाहता हूं (यानी रंगीन पृष्ठभूमि केवल पाठ की चौड़ाई, और अधिमानतः एक बेहतर रंग में जिसे मैं चुन सकता हूं)। मुझे संदेह है कि इसका मतलब है कि मुझे पर सही प्रकार का पेंटर असाइन करने की आवश्यकता है "वृक्ष: ट्रीसेल [फोकस + चयनित] .backgroundPainter", लेकिन मुझे नहीं पता कि इसे कैसे लिखना है।
सुझाव सबसे अधिक स्वागत है।
संपादित
जावा 7 के साथ अजीब चयनित नोड उजागर मिलते हैं!
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);
}
}
}
मेरी पोस्टिंग में अनुपूरक: निश्चित रूप से यदि चित्रकार की तुलना में कोई आसान तरीका है, तो यह भी बेहतर होगा। ट्री.सेक्शन बैकग्राउंड को कम विचलित रंग में बदलने का प्रयास किया, लेकिन निम्बस संशोधन को अनदेखा कर रहा है। – user1359010
मेरी टिप्पणी के आगे। आप Tree.selectionBackground को सीधे सेट नहीं कर सकते हैं, लेकिन यह रंग numbusSelectionBackground से लिया गया है, इसलिए nimbUID.put ("nimbusSelectionBackground", नया ColorUIRESource (205,208,216)); कुछ वांछित प्रभाव पैदा करता है (एक हल्का वृक्ष। चयन बैकग्राउंड)। अभी भी टेक्स्ट की बजाय एक पंक्ति को हाइलाइट किया जा रहा है, इसलिए चित्रकार पर सहायता की सराहना की जाएगी। – user1359010
@oliholz कृपया आप अपने बक्षीस पर टिप्पणी कर सकते हैं, यकीन है कि मुझे यह प्रश्न कभी नहीं देखा जा रहा है, क्योंकि ज्यादातर मामलों में क्लासिक रेंडरर्स अवधारणा निम्बस गुणों और सेटिंग्स को ओवरलोड कर रही है – mKorbel