单击按钮时无法刷新JPanel

时间:2011-12-04 19:22:02

标签: java swing jpanel

我是java swing的新手,我在刷新面板时遇到问题。 你能告诉我为什么点击按钮后,JTextField没有显示在主面板上吗? 在此先感谢:)

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      

    javax.swing.JTextField t = new javax.swing.JTextField("Hello");  
    mainPanel.add(t);      
    mainPanel.validate();
} 

3 个答案:

答案 0 :(得分:0)

您是否尝试过调用revalidate()而不是验证()?

答案 1 :(得分:0)

您可能忘记设置mainPanel

的布局

尝试以下方法:

mainPanel.setLayout(new FlowLayout());
mainPanel.add(new JTextField("Hello!"));
mainPanel.validate();

<强>更新

上述建议并不够聪明。

camickr所示,FlowLayoutJPanel的默认布局。

我希望以下建议会更有帮助。

示例,对情况进行建模。

import java.awt.EventQueue;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class JPanelDefaultLayoutTest extends JFrame {
    private JPanel mainPanel;

    public JPanelDefaultLayoutTest () {
        initComponents();
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                new JPanelDefaultLayoutTest().setVisible(true);
            }
        });
    }

    private void initComponents() {
        setTitle("Add hello.");
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        mainPanel = new JPanel();        

        JButton button = new JButton();   
        button.setText("Button");
        button.setToolTipText("Press me.");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JTextField hello = new JTextField("Hello!");
                mainPanel.add(hello);
                mainPanel.revalidate();
            }
        });

        setContentPane(mainPanel);
        mainPanel.add(button);
//        pack();
    // If you comment the next line (and uncomment the pack() method above),
    // you have to resize the frame manually,
    // to see the added hello after the button press.
        setSize(200, 75);
    }
}

结论:如果面板的大小太小,您必须手动调整大小,以查看添加的JTextField实例。

答案 2 :(得分:0)

这是我疯狂的@ss猜测:你正在使用NetBeans来构建你的GUI,并且应该接受新的JTextField的容器,mainPanel,使用NetBeans的GroupLayout,这是一个很难容纳组件的组件在飞行中添加。如果是这样,让mainPanel使用更加用户友好的布局,或者使用自己的简单布局嵌套容器,以实现复杂的GUI。

您需要了解如何在这里使用这些布局管理器:Laying out Components in a Container

您还希望在此问题和下一个问题中提供足够的信息,以便我们不必继续制作SWAG。