java swing动态添加组件

时间:2011-06-29 06:20:36

标签: java swing components dynamic

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

基本上我有一个主JPanel由两个子JPanel(左侧面板和右面板)组成,它们水平排列。在左JPanel我有一些JButtons,当我愿意点击JButton我需要在右JLabel中显示一些JTextAreaJPanel等。我尝试了一个代码,但它不起作用。当我点击按钮时它进入事件监听器功能,但是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);
                }
            });
        }
    }

3 个答案:

答案 0 :(得分:19)

添加(或删除)组件后,您需要致电revalidate

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

应该这样做。

答案 1 :(得分:11)

呼叫

rightPanel.revalidate();
rightPanel.repaint();
添加

答案 2 :(得分:3)

添加标签后添加此行

rightPanel.updateUI();

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