0

我有一个 JFrame,其中包括一个工作按钮和一个标签。该程序运行良好,当我单击按钮时,我收到一条显示“正在启动”的弹出消息。但是如果我尝试添加一个 JTextField,当我运行程序时,对于字段、按钮或标签,框架是空白的。

没有该字段的工作代码如下。

    JFrame frame = new JFrame("Test");
    frame.setSize(750,300);
    frame.setLocationRelativeTo(null);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);



    JPanel panel = new JPanel(false);



    JLabel label = new JLabel("The Game.");



    JButton button = new JButton("Start");
    button.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent e)
        {
            //Runs this code when button is pressed
            JOptionPane.showMessageDialog(null, "Starting");
        }
    }
            ); 
    button.setContentAreaFilled(true);
    button.setEnabled(true);
    button.setToolTipText("Starts");
    button.setVisible(true);






    frame.add(panel);
    panel.add(label);
    panel.add(button);

具有不起作用的字段的代码如下。

    JFrame frame = new JFrame("Test");
    frame.setSize(750,300);
    frame.setLocationRelativeTo(null);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);



    JPanel panel = new JPanel(false);



    JLabel label = new JLabel("The Game.");



    JButton button = new JButton("Start");
    button.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent e)
        {
            //Runs this code when button is pressed
            JOptionPane.showMessageDialog(null, "Starting");
        }
    }
            ); 
    button.setContentAreaFilled(true);
    button.setEnabled(true);
    button.setToolTipText("Starts");
    button.setVisible(true);







    JTextField field = new JTextField("test", 20);
    field.setEnabled(true);
    field.setVisible(true);







    frame.add(panel);
    panel.add(label);
    panel.add(button);




    panel.add(field);

所以不知何故,那 4 行代码正在清除框架。

4

6 回答 6

2

frame.setVisible(true)在最后一行调用(添加所有组件之后)。您在添加组件之前调用它。构图

于 2013-07-19T03:33:05.897 回答
2

如果你把

        frame.pack(); or
frame.setVisible(true);

在它工作的代码的底部。

于 2013-07-19T03:33:19.573 回答
2

尝试移动你的:frame.setVisible(true);作为最后一条语句。

于 2013-07-19T03:33:36.427 回答
2

移动

frame.setVisible(true);

作为最后一个电话。要了解更多信息,请查看以下链接。

为什么我不应该在添加组件之前调用 setVisible(true)?

于 2013-07-19T03:34:13.320 回答
2

无需将按钮的可见属性显式设置为 true。将您的面板添加到框架的容器中,并在最后简单地将成名的可见属性设置为 true。

frame.getContentPane().add(panel);
....
frame.setVisible(true);
于 2013-07-19T03:48:47.327 回答
1

看来你从来没有在最后使框架可见。要做到这一点,只需放在frame.setVisible(true);最后。

于 2013-07-19T03:35:12.513 回答