2011-07-04 13 views
5

मेरे पास JPanelJPanel बी JTabbedPanel सी के अंदर एक शीर्षक सीमा के साथ है। मेरे पास समय-समय पर ए और बी की सामग्री को ताज़ा करने का एक तरीका है।देरी शीर्षक शीर्षक शीर्षक अद्यतन/ताज़ा करें, क्यों?

दुर्भाग्यवश, ए और बी के सभी आइटम समय पर रीफ्रेश किए जाते हैं, लेकिन ए का शीर्षक नहीं है। मुझे स्पष्ट रूप से किसी अन्य टैबड पैनल पर स्विच करना होगा और सी के लिए सी के लिए वापस आना होगा। क्यूं कर?

कोड मैं उपयोग कर रहा हूँ निम्नलिखित है:

TitledBorder tmp 
      = (TitledBorder) this.GroupingProfilePanel.getBorder(); 

    // Resetting header 
    if (this.c != null) { 
     tmp.setTitle("Set - " + this.c.getName()); 
    } else { 
     tmp.setTitle("Set"); 
    } 

उत्तर

9

शीर्षक अद्यतन करने के बाद, सत्यापित करें कि आप घटक शीर्षक सीमा या अपने पूर्वजों में से एक होने पर repaint() आह्वान।

enter image description here

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.util.Date; 
import javax.swing.AbstractAction; 
import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.border.TitledBorder; 

/** @see http://stackoverflow.com/questions/6566612 */ 
public class TitledBorderTest { 

    public static void main(String[] args) { 
      EventQueue.invokeLater(new Runnable() { 
       public void run() { 
        new TitledBorderTest().create(); 
       } 
      }); 
    } 

    private void create() { 

     String s = "This is a TitledBorder update test."; 
     final JLabel label = new JLabel(s); 
     final TitledBorder tb = 
      BorderFactory.createTitledBorder(new Date().toString()); 
     label.setBorder(tb); 
     JFrame f = new JFrame("Titled Border Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(label); 
     f.add(new JButton(new AbstractAction("Update") { 

      public void actionPerformed(ActionEvent e) { 
       tb.setTitle(new Date().toString()); 
       label.repaint(); 
      } 
     }), BorderLayout.SOUTH); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
     System.out.println(tb.getMinimumSize(f)); 
    } 
} 
+2

संदर्भ के लिए, टैब स्विचिंग 'invokes रीपेंट()' 'JTabbedPane' यूआई प्रतिनिधि के माध्यम से। – trashgod

+0

अच्छा और अच्छा +1 – mKorbel

+1

कुछ लोग तर्क देते हैं कि शीर्षक को स्वचालित रूप से पुनर्विचार करना चाहिए। हालांकि कार्यान्वयन के विवरण के कारण यह करना मुश्किल है; यहां बग 4117141 के लिए सूर्य बग रिपोर्ट देखें: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4117141 – Ryan

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