मेरे पास मेरे JToolBar में बटन का एक गुच्छा है, और मैंने उनमें से कुछ को मेरे आवेदन की स्थिति के आधार पर अक्षम या सक्षम करने के लिए सेट किया है। मुझे लगता है कि जब मैं एक बार में कई बटन अपडेट कर रहा हूं कि वे एक ही समय में सभी को पुनर्निर्मित नहीं कर रहे हैं। मैं यह सुनिश्चित करना चाहता हूं कि जब मैं अक्षम/सक्षम होने के लिए कई बटन सेट करता हूं, तो वे सभी एक ही समय में स्थिति बदलते हैं।क्या मैं कुछ स्विंग घटक अपडेट बैच कर सकता हूं ताकि सभी एक बार में पश्चात हो जाएं?
नीचे एक छोटा परीक्षण है जो समस्या का प्रदर्शन करता है। (इसे बटन आइकन के रूप में उपयोग करने के लिए वर्तमान निर्देशिका में फ़ाइल a.png की आवश्यकता है।) जब आप इसे चलाते हैं, तो 10 बटन वाला टूलबार दिखाया जाता है। टर्मिनल पर एंटर दबाकर सभी बटनों की अक्षम स्थिति को टॉगल कर दिया जाएगा। कम से कम मेरी मशीन पर, हर बार जब मैं ऐसा करता हूं तो बटन एक यादृच्छिक क्रम में पुन: चित्रित होते हैं, और सभी एक साथ नहीं।
ऐसा लगता है कि डबल बफरिंग समस्या को हल कर सकती है, हालांकि पहली चीज मैंने कोशिश की (JToolBar पर डबल बफरिंग सेट करना) कुछ भी प्रभावित नहीं कर रहा था।
धन्यवाद,
कैमरून मुझे XP पर JDK6 प्रयोग करने के लिए
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
public class Test {
public static void main(String[] args) throws IOException {
final JButton[] bs = new JButton[10];
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame("test");
JToolBar t = new JToolBar();
f.getContentPane().add(t);
for (int i = 0; i < bs.length; i++) {
bs[i] = new JButton(new ImageIcon("a.png"));
t.add(bs[i]);
}
f.pack();
f.setVisible(true);
}
});
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
for (;;) {
r.readLine();
EventQueue.invokeLater(new Runnable() {
public void run() {
for (JButton b : bs) {
b.setEnabled(!b.isEnabled());
}
}
});
}
}
}