मैं JToggleButton
का रंग बदलने की कोशिश कर रहा हूं, जब इसे विश्वसनीय, दिखने और स्वतंत्र तरीके से महसूस किया गया है।किसी चयनित JToggle बटन के पृष्ठभूमि रंग को बदलना
UIManager.put("ToggleButton.selected", Color.RED);
नोट:
धातु एल & एफ का उपयोग कर, तो UIManager का उपयोग कर एक दृष्टिकोण है Iyy ने बताया कि मैंने ऊपर संपत्ति नाम लिखने में कोई गलती की थी, लेकिन मैं इसे छोड़ देंगे के लिए ऊपर के लोगों यहाँ हो रही है, लेकिन वास्तविक संपत्ति नाम माना जाता है:
UIManager.put("ToggleButton.select", Color.RED);
बहरहाल, यह मेरे वर्तमान देखो और महसूस (वर्तमान में Windows XP) में काम नहीं करता। कुछ और विश्लेषण के बाद, ऐसा लगता है कि विंडोज़ (अभी भी एक्सपी) में सिस्टम दिखता है और महसूस करता है Color
-आधारित UIManager
ToggleButton
के लिए गुणों का उपयोग नहीं करता है, या कम से कम उन्हें स्वयं आपूर्ति नहीं करता है (एक त्वरित उदाहरण है find all property keys from the UIManager
पर ऑनलाइन, जो कि उदाहरण में आसानी से Color
गुणों तक सीमित है)।
मैं पृष्ठभूमि रंग स्थापित करने की कोशिश की है:
Action action = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) { /* stuff */ }
};
JToggleButton button = new JToggleButton(action);
// tried with and without opaque true
button.setOpaque(true);
button.setBackground(Color.RED);
यह न केवल चयनित राज्य में परिवर्तन नहीं होता है, लेकिन वह भी नहीं चुना जाता राज्य प्रभावित नहीं करता।
मैं केवल कार्रवाई प्राप्त करने के बाद पृष्ठभूमि रंग बदलने की कोशिश की है:
@Override
public void actionPerformed(ActionEvent e)
{
JToggleButton button = (JToggleButton)e.getSource();
if (button.isSelected()) // alternatively, (Boolean)getValue(Action.SELECTED_KEY)
{
button.setBackground(Color.RED);
}
}
कि में से कोई भी काम करता है। केवल एक चीज है कि मैं काम करने के लिए मिल गया है मुझे चयनित राज्य (जो एक काम कर उदाहरण की ओर जाता है, गैर मानक की तलाश में यद्यपि) में बटन अपने आप को आकर्षित करने के लिए की आवश्यकता है:
private class ColoredToggleButton extends JToggleButton
{
ColoredToggleButton(Action action, Color color)
{
super(action);
setBackground(color);
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if (this.isSelected())
{
int w = getWidth();
int h = getHeight();
String s = getText();
// selected color
g.setColor(getBackground());
g.fillRect(0, 0, w, h);
// selected foreground color
g.setColor(SystemColor.controlText);
g.drawString(s,
(w - g.getFontMetrics().stringWidth(s))/2 + 1,
(h + g.getFontMetrics().getAscent())/2 - 1);
}
}
}
कि थोड़ा में एक टिप्पणी से संशोधित किया गया है यह Java bug report। दिलचस्प बात यह है कि 1 99 8 में तय किए गए दावों में
क्या किसी को बेहतर, एल & एफ किसी चयनित JToggleButton के पृष्ठभूमि रंग को सेट करने के लिए स्वतंत्र तरीका पता है?
आप BasicbuttonUI या सिर्फ MetalButtonUI ओवरराइड कर सकते हैं (फिर बस के लिए धातु एल एंड एफ) कुछ संकेत http://stackoverflow.com/questions/5751311/creating-custom-button -इन-जावा/5755124 # 5755124 – mKorbel
क्यों? एलएएफ को देखने को नियंत्रित करना है, बेहतर इसे करने का प्रयास करें - यदि हस्तक्षेप के साथ सफल होता है, तो आपका कस्टम पेंट/रंग सभी – kleopatra
@ क्लेओपेट्रा में एक गले के अंगूठे की तरह चिपकेगा, आमतौर पर मैं सहमत हूं कि एल एंड एफ छोड़ना अच्छा अभ्यास है, लेकिन बस, यह एक वांछित विशेषता है। विशेष रूप से, यह वास्तव में बाहर निकलना है। – pickypg