मैं अपने चैट प्रोग्राम के लिए चैट डेटा रखने के लिए एक जेएलिस्ट का उपयोग कर रहा हूं।
यह कस्टम जेपीनल ऑब्जेक्ट को तत्व प्रकार के रूप में प्रस्तुत करने के लिए एक कस्टम सूची रेंडरर का उपयोग करता है।
इस जेपीनल में दो जेएलएबल्स (नाम और समय के लिए शीर्ष पर लगी हुई), और एक JTextArea (चैट संदेश के लिए नीचे, नीचे लगी हुई) शामिल है।पुनर्वितरण JList - कस्टम तत्व
यह इस तरह दिखता है:
a pic1 http://oi44.tinypic.com/20jiix5.jpg
सब कुछ अच्छा काम करता है, लेकिन मैं एक छिपाने/शो सुविधा जोड़ना चाहते हैं।
पहले प्रोग्राम किए गए पॉपअपमेनू हैंडलर का उपयोग करके, जब आप किसी तत्व पर राइट क्लिक करते हैं तो मेरे पास पॉपअप दिखाई देता है।
a pic2 http://oi42.tinypic.com/2m5exxt.jpg
जब आप छिपाने क्लिक करें (या शो, यह एक टॉगल है) तो यह तो जैसे तत्व को कम करना चाहिए ...
a pic3 http://oi41.tinypic.com/kf3apx.jpg
केवल समस्या है ... ऐसा नहीं जेएलआईस्ट सेल आकार को अपडेट न करें क्योंकि आप बड़े खाली क्षेत्र को देख सकते हैं जहां टेक्स्ट होता था।
हालांकि, जब मैं एक संदेश लिखें ...
a pic4 http://oi40.tinypic.com/35jdoo7.jpg
JList सेल के आकार 'छिपाएं' प्रकार्य पूरा करता है।
मेरा सवाल यह है कि आप JList को प्रोग्रामेटिक रूप से पुन: वैध/पुनर्निर्मित करने के लिए कैसे प्राप्त करते हैं।
और नहीं लगता कि मैं सब स्पष्ट समाधान प्रयास नहीं किया है कि ...
public void setHidden(boolean hidden) {
// this is in the custom JPanel class
System.out.println("Initial: " + this.getPreferredSize());
// TextArea is the JTextArea which we set invisible when we want to hide it.
TextArea.setVisible(!hidden); // TextArea is a variable btw
this.invalidate();
this.validate();
this.repaint();
System.out.println("After: " + this.getPreferredSize());
container.revalidate();
}
/*
* This is what the above printlns show when you hide, then show the element.
*
* Initial: java.awt.Dimension[width=176,height=38]
* After: java.awt.Dimension[width=176,height=20]
* Initial: java.awt.Dimension[width=176,height=20]
* After: java.awt.Dimension[width=176,height=38]
*/
public void revalidate() {
// container.revalidate() ^^^
// list is the list containing the chat elements
list.invalidate();
list.validate();
list.repaint();
}
कस्टम JPanel वर्ग एक GroupLayout का उपयोग करता घटकों रेंडर करने के लिए।
क्या आपको लोगों को कोई ज्ञान है कि प्रोग्रामर के रूप में जेएलिस्ट को अपने सेल आकार को फिर से सत्यापित करने का तरीका क्या है?
... मेरे द्वारा पोस्ट की गई विधियों के अलावा? :)
समाधान:
विधि के बाद विधि खोज और यदि वे मेरी समस्या का समाधान होगा परीक्षण के बाद, मैंने पाया कि एक छिपाने/शो ऑपरेशन के बाद इस कोड को क्रियान्वित करने सेल ऊंचाई (और चौड़ाई) का कारण होता है पुनर्गणना किया जाना है और जेएलिस्ट के किसी भी अवांछित दृश्य 'झिलमिलाहट' के बिना।
list.setFixedCellHeight(0);
list.setFixedCellWidth(0);
list.setFixedCellHeight(-1);
list.setFixedCellWidth(-1);
कृपया जावा नामकरण सम्मेलनों को सीखें और उन्हें चिपकाएं – kleopatra
मुझे जावा नामकरण सम्मेलन पता है, मुझे बस अपने स्विंग चर के ऊपरी मामले की तरह लगता है। लेकिन मैं हमेशा इसका पालन नहीं करता ... –