我通过将我的类扩展到JFrame来制作JFrame。在我的构造函数中,我有这个代码
public MyUI() {
this.setSize(400, 400);
this.setVisible(true);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Calculator");
JTextField textField1 = new JTextField("test", 15);
JPanel thePanel = new JPanel();
JLabel label1 = new JLabel("Tell me something");
JButton button1 = new JButton("Click Me");
button1.setToolTipText("Bla");
thePanel.add(label1);
thePanel.add(button1);
thePanel.add(textField1);
this.add(thePanel);
}
然而,没有任何表现。但如果我注释掉
JTextField textField1 = new JTextField("test", 15);
thePanel.add(textField1);
一切正常。我的代码有什么问题?
答案 0 :(得分:2)
问题是您在将组件添加到框架之前将框架设置为可见,这会导致组件层次结构无效。来自the docs for the add
method:
如果已经显示了容器,则必须在此后验证层次结构才能显示添加的组件。
要更正此问题,您应在添加this.setVisible(true)
后将行thePanel
移至最后。或者,您也可以在结尾处拨打revalidate
和repaint
,以强制更新和重新绘制。
至于为什么它在你注释掉那条线时起作用,我不知道,但你不能依赖它。在我的机器上,即使删除了这些行,它也不会显示任何组件。
答案 1 :(得分:2)
问题是您在添加组件之前显示JFrame
(setVisible(true)
), 。
所以:
仅在添加所有组件后调用setVisible(true)
。
或致电:
revalidate();
repaint();
告诉JFrame
重新计算其布局,并重新绘制自己。
我不知道,为什么评论文本字段部分,使JFrame
显示正确,也许它与组件布局有关。