2012-01-29 54 views
1

嗨創建的JLabel我有我想要的程序,以便在按下時,一個新的JLabel在屏幕上顯示一個JButton。我已將JLabel添加到框架,並且可見。它顯示在action之外,但不在裏面。中的actionPerformed在Java中

標籤被宣佈爲法外LBL,然後它在actionPerformed方法

public void actionPerformed(ActionEvent e) { 

     JLabel lbl = new JLabel("ONE"); 
} 

任何人可以幫助我,使標籤出現在按下按鈕時產生的?謝謝

+0

另請參閱此[答案](http://stackoverflow.com/a/9056557/230513)。 – trashgod 2012-01-29 20:43:17

+0

爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2012-01-30 04:07:07

回答

1

你也宣佈它在裏面 actionPerformed方法 - 這個聲明可能隱藏了更早的一個(在方法之外)。你能發佈更多的代碼嗎?下面的代碼工作正常,我:

public class NewLabel 
{ 
    public static void main(String[] args) 
    { 

     final JFrame frame = new JFrame(); 

     JButton button = new JButton("Add label"); 

     button.addActionListener(new ActionListener() 
     { 

      public void actionPerformed(ActionEvent e) 
      { 

       JLabel lbl = new JLabel("ONE"); 
       frame.add(lbl); 

       frame.setSize(100, 100); 
       // or you can't see the new button without resizing manually! 
      } 
     }); 

     frame.add(button); 
     frame.pack(); 
     frame.setVisible(true); 

    } 
} 

(在某些情況下,你可能還需要告訴容器/幀重新佈局,通過調用重新驗證()就可以了...)

+0

我正在使用一個框架,而不是一個容器。我試過該框架的代碼,它沒有工作 – jj007 2012-01-29 20:17:03

+0

JFrame _is_一個容器。好吧,無論如何,它是Container的一個子類。您是否在添加JLabel之後嘗試調用frame.revalidate()和frame.repaint()? – DNA 2012-01-29 20:18:10

+0

試了一下,不工作:( – jj007 2012-01-29 20:20:20

3

這是你的方式做它:

public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == buttonname){ 
     labelname.setVisible(true); 

    } 
} 

另外,不要忘記做

buttonname.addActionListener(this); 

,並在你的方法,你佈局形式加上:

yourPanel.Add(labelname) 

希望這有助於!

Arno

1

您創建了JLabel,但沒有將其添加到任何容器。這就是爲什麼它沒有顯示。你寫的是好的,你需要的只是將標籤添加到它應該在的容器上。

JLabel lbl = new JLabel("ONE"); 
yourPanel.Add(lbl); 
+0

它需要一個'重新驗證「。 – 2012-01-29 20:28:46

相關問題