2016-02-02 72 views
0

假設我想單擊一個按鈕,那麼JLabel/JTextArea/...將在GUI中顯示,如何完成該作業?無法添加ActionListener以添加組件

示例代碼:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class MyJFrame extends JFrame { 
    public MyJFrame() { 
     JButton jButton = new JButton(); 
     jButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       add(new JLabel("xxxxx"), BorderLayout.SOUTH); 
      } 
     }); 

     add(jButton, BorderLayout.CENTER); 
    } 

    public static void main(String[] args) { 
     MyJFrame myJFrame = new MyJFrame(); 
     myJFrame.pack(); 
     myJFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     myJFrame.setVisible(true); 
     myJFrame.setLocationRelativeTo(null); 
    } 
} 

我的代碼有什麼問題。點擊按鈕後,沒有JLabel出現。


更新:

誰能告訴我,如果我想從Java官方信息解決我的問題,我應該在哪裏尋找?這似乎JAVA教程或API有我的問題涉及什麼..

+1

有官方Swing教程,獲取更多信息:https://docs.oracle.com/javase/tutorial/uiswing/layout/howLayoutWorks.html – Berger

+0

你可能會考慮使用'CardLayout',參見[如何使用CardLayout](http:///docs.oracle.com/javase/tutorial/uiswing/layout/card.html) – MadProgrammer

回答

2

您應該通知框架,其內容已經改變(revalidate()),並重繪自己(repaint()):

public void actionPerformed(ActionEvent e) { 
       add(new JLabel("xxxxx"), BorderLayout.SOUTH); 
       revalidate(); 
       repaint(); 
      } 
+0

它的工作原理!謝謝。 – guo