2011-09-08 6 views
5

मेरे पास एक कस्टम ListCellRenderer है और डिफ़ॉल्ट निंबस चयन बैकराउंड रंग का उपयोग करना चाहूंगा। मैं के साथ रंग देखने कर सकते हैं:मैं UIManager के साथ डिफ़ॉल्ट निंबस रंग का उपयोग कैसे करूं?

Color selectionBackground = UIManager.getColor("nimbusSelectionBackground"); 

और अगर मैं इसे प्रिंट, उस पर Nimbus default colors मान जैसे ही हैं। लेकिन जब मैं इसे जेपीनल पर उपयोग करता हूं तो मुझे एक अलग ग्रे रंग मिलता है, मैं UIManager से रंग का उपयोग कैसे कर सकता हूं?

जब मैं कार्य करें:

setBackground(Color.RED); 

JPanels backround लाल रंग में दिखाया गया है, लेकिन जब मैं कार्य करें:

setBackground(selectionBackground); 

"selectionBackground" रंग नहीं इस्तेमाल किया है, लेकिन एक ग्रे रंग ।

enter image description here

पृष्ठभूमि होना चाहिए::

enter image description here

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UIManager.LookAndFeelInfo; 

public class PanelColor { 

    public static void main(String[] args) { 

     // switch to Nimbus Look And Feel 
     for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       try { 
        UIManager.setLookAndFeel(info.getClassName()); 
       } catch (Exception e) { e.printStackTrace(); } 
       break; 
      } 
     } 

     Color selectionBackground = UIManager.getColor("nimbusSelectionBackground"); 

     JPanel panel = new JPanel(new BorderLayout()); 
     panel.setPreferredSize(new Dimension(300,50)); 
     panel.add(new JLabel(selectionBackground.toString()), BorderLayout.NORTH); 

     // is not showing the selectionBackground color 
     panel.setBackground(selectionBackground); 

     JFrame frame = new JFrame(); 
     frame.add(panel); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
+0

क्या यह संभव है कि निम्नलिखित प्रश्न आपको निम्बस के साथ मदद कर सके - http://stackoverflow.com/questions/5840599/jbutton-background-on-nimbus-laf? –

+1

वाह, बहुत विषम। मैंने कोड में चेक किया: लौटा रंग टाइप javax.swing.plaf.ColorUIResource है। लेकिन मुझे नहीं लगता कि यह किसी भी समस्या का कारण बन सकता है क्योंकि यह रंग का उप-वर्ग है। ColorUIResource के कोड में कुछ खास नहीं है, यूआई या कुछ भी संदर्भ नहीं है। जैसा कि जॉय ने सुझाव दिया, 'चयनबैकग्राउंड = नया रंग (चयनबैकग्राउंड.getआरजीबी());' काम करता है। – toto2

उत्तर

4

निंबस जाहिरा तौर पर तैयार नहीं है कि इसके रंग कहीं और उपयोग किया जाता है


यहाँ एक उदाहरण और स्क्रीनशॉट है। मैं थोड़ी देर पहले इस पर भी ठोकर खाई और फिर वापस मेरा सबसे अच्छा समाधान घटकों का उपयोग करके एक नया Color बनाना था (आप पूछ सकते हैं) और इसका उपयोग करें। बेशक, तब आप उस रंग से चिपके रहते हैं भले ही एल & एफ बदल दिया गया हो।

मुझे पता है कि DerivedColor का पूरा बिंदु आप UIManager से वापस आते हैं। हालांकि मुझे एक बेहतर समाधान नहीं मिला है।

यह अन्य एल & एफएस और अन्य चीजों के लिए भी इसी तरह होता है। जैसे जीटीके एल & एफ खुशी से आपको वह आइकन देगा जो आप चाहते हैं लेकिन वे आपके नियंत्रण में नहीं आ जाएंगे। मुझे लगता है कि यह सब कुछ है कि स्विंग (ए) बेहद जटिल है और (बी) कोई एल & एफ वास्तव में अनुबंधों का पालन करता है, यहां तक ​​कि निंबस भी नहीं, नवीनतम और सबसे अच्छे होने के बावजूद।

+0

DerivedColor कहां परिभाषित किया गया है? क्या आपका मतलब है [निंबस लुक एंडफेल।getDerivedColor] (http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/nimbus/NimbusLookAndFeel.html#getDerivedColor%28java.lang.String,%20float,%20float,%20float, % 20int,% 20boolean% 29)? – Gili

5

मुझे नहीं लगता कि निंबस रंग को स्थापित करने का विरोध करता है। यह गलत तरीके से मानता है कि आपने डिफ़ॉल्ट को ओवरराइड नहीं किया है क्योंकि UIManager.getColor() ColorUIResource का एक उदाहरण देता है।

कलरयूइरसोर्स बस एक रंग है जो यूआईआरसोर्स मार्कर इंटरफ़ेस को लागू करता है। जावाडोक के मुताबिक, एल & एफएस "इस इंटरफ़ेस का उपयोग यह तय करने के लिए करें कि कोई गुण मान ओवरराइड किया गया है या नहीं"। निम्बस पृष्ठभूमि रंग की जांच करता है, ध्यान दिया है कि आपने इसे ओवरराइड नहीं किया है, और कुछ आंतरिक व्यवहार पर वापस आ गया है जिसकी आप उम्मीद नहीं कर रहे हैं।

संबंधित मुद्दे