java swing动态添加组件

我是Java Swing的新手。 我对在Swing中动态添加组件有一些疑问。

基本上我有一个主JPanel由两个子JPanel (leftpanel和rightpanel)组成,它们是水平排列的。在左边的JPanel我有一些JButtons ,当我点击JButton我需要在右边的JPanel显示一些JLabelJTextArea等。 我尝试了一个代码,但它不起作用。当我点击按钮时它进入事件监听器function,但JLabel我无法查看。

我在下面给出了我的代码。 请看看这个并纠正我。 提前致谢

 package my; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; /** * * @author root */ public class myAplliwithPanel extends JFrame{ JPanel rightPanel; public myAplliwithPanel() { initGui(); } public void initGui() { JPanel mainPanel=new JPanel(); mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS)); JPanel leftPanel=new JPanel(); leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS)); rightPanel=new JPanel(); rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.Y_AXIS)); JButton dbBut=new JButton("DB"); JButton appliBut=new JButton("Appli"); appliBut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { JLabel label=new JLabel("dsggs"); rightPanel.add(label); } }); JButton backendBut=new JButton("Backend"); leftPanel.add(dbBut); leftPanel.add(appliBut); leftPanel.add(backendBut); mainPanel.add(leftPanel); mainPanel.add(rightPanel); add(mainPanel); setTitle("System Manger"); setSize(400, 400); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main(String args[]) { SwingUtilities.invokeLater(new Runnable() { public void run() { myAplliwithPanel myObj = new myAplliwithPanel(); myObj.setVisible(true); } }); } } 

您需要在添加(或删除)组件后调用revalidate

 rightPanel.add(label); rightPanel.revalidate(); 

应该做的伎俩。

呼叫

 rightPanel.revalidate(); rightPanel.repaint(); 

添加后

添加标签后添加此行

rightPanel.updateUI();

在运行时添加任何组件时,需要使用此方法更新ui