2013-03-27 67 views
1

我可以使用add(new Jlabel())在我的Jpanel内部Jpanel构造函数上创建标签,但是一旦我使用其他函数调用add(),标签就不会显示在面板上。我做错了什么?如何将Jlabel添加到构造函数之外的Jpanel?

public class DisplayPanel extends JPanel { 


     JLabel headerField = new JLabel("Choose a file to generate report."); 

     JLabel dateField = new JLabel("123"); 
     JLabel meanField = new JLabel(""); 

     JLabel minField = new JLabel(""); 

     JLabel maxField = new JLabel(""); 

     JLabel stdDevField = new JLabel(""); 

     public DisplayPanel() { 
     super(); 
       setBackground(Color.white); 
       setLayout(new GridLayout(6, 1)); 


     add(headerField); 
     **//add(new JLabel("123")); this will work** 

     } 


     public void setFields(DataManager d) 
     { 
      dateField.setText(d.getStartDate() + " - " + d.getEndDate()); 
      meanField.setText("Mean: " + d.getMean()); 
      minField.setText("Min: " + d.getMin()); 
      maxField.setText("Max: " + d.getMax()); 
      stdDevField.setText("Std Dev: " + d.getStdev()); 
      this.add(new JLabel("123")); **//this doesn't work** 
     } 

回答

5

为了获得JPanel已经取得了明显的后新添加的组件显示,你需要调用revalidate(),通常repaint()。究其原因,在构造函数中JPanel

add(new JLabel("123")); 

作品时加入容器,通常为JFrame验证。在初始化阶段添加标签更简单,因为您只需拨打JLabel#setText并且不需要revalidate/repaint调用。

+1

感谢您的回答! – user1701840 2013-03-27 02:02:15

+1

不客气:) – Reimeus 2013-03-27 03:44:21

相关问题