我有一个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行代码正在清除帧。
答案 0 :(得分:2)
在最后一行调用frame.setVisible(true)
(添加所有组件后)。您在添加组件之前调用它。框架
答案 1 :(得分:2)
如果你把
frame.pack(); or
frame.setVisible(true);
在代码底部工作。
答案 2 :(得分:2)
尝试移动您的:frame.setVisible(true);
作为最后一个声明。
答案 3 :(得分:2)
移动
frame.setVisible(true);
作为最后一次通话。要了解更多信息,请查看以下链接。
Why shouldn't I call setVisible(true) before adding components?
答案 4 :(得分:2)
无需将button的visible属性显式设置为true。将面板添加到框架的Container中,并在结尾处将名称的visible属性设置为true。
frame.getContentPane().add(panel);
....
frame.setVisible(true);
答案 5 :(得分:1)
似乎你从未在最后看到框架。要做到这一点,只需将frame.setVisible(true);
放在最后。