JFrame 不显示任何组件
Posted
技术标签:
【中文标题】JFrame 不显示任何组件【英文标题】:JFrame not presenting any Components 【发布时间】:2014-08-18 08:09:26 【问题描述】:我正在使用以下代码创建一个非常简单的JFrame
,但由于某种原因它没有显示任何组件,只是一个空白框。为什么会这样?我创建了很多次框架,但我就是不知道出了什么问题。代码是:
Main()
JFrame frame = new JFrame("Colorizer | By: NonameSL");
frame.setSize(400,200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.setContentPane(panel);
textField=new JTextField("Enter your name!");
textField.setBounds(0,0,40,200);
textField.setVisible(true);
frame.getContentPane().add(textField);
button=new JButton("Go!");
button.setBounds(0, 200, 40, 200);
button.setVisible(true);
frame.getContentPane().add(button);
rectangle=new RecShape(Color.WHITE);
rectangle.setBounds(0,40,400,160);
rectangle.setVisible(false);
frame.getContentPane().add(rectangle);
Main.frame=frame;
registerButton();
RecShape
类是我创建的一个类,用于在屏幕上简单地创建一个矩形。
怎么了?
【问题讨论】:
另见Initial Threads。 Java GUI 可能必须在多个平台、不同的屏幕分辨率和使用不同的 PLAF 上工作。因此,它们不利于组件的精确放置。为强大的 GUI 组织组件,而不是 use layout managers 或 combinations of them,以及 white space 的布局填充和边框。 顺便说一句,永远不要打电话给setBounds/setSize/setLocation
把这一切都交给 LayoutManager,这是他们的工作,而不是你的。
【参考方案1】:
把frame.setVisible(true);
添加组件后JFrame
,它会显示所有添加的组件。此外,您应该使用特定的布局而不是为组件设置边界。您可以使用Layout Manager。
【讨论】:
非常感谢!我花了几个小时试图弄清楚我的代码出了什么问题,我想我没有注意到这一点。【参考方案2】:您必须将frame.setVisible(true);
移动到方法的末尾;添加组件后,可见性必须设置为 true。
或者,您可以将以下内容添加到方法的末尾:
frame.revalidate();
frame.repaint();
使用新添加的组件重新验证和重新绘制框架,尽管我推荐前一种方法。
【讨论】:
虽然frame.revalidate()
行可以在1.7+
上工作,但在以前的版本中,你必须使用frame.getContentPane().validate()
我猜【参考方案3】:
你可以在最后加上这个;
frame.pack()
【讨论】:
【参考方案4】:最好先将组件添加到变量“面板”,然后将完成的面板添加到.getContentPane().add()
。
最重要的问题是你最好在方法结束时调用frame.setVisible(true);
。
【讨论】:
“为方便起见,add
及其变体,remove
和 setLayout
已被覆盖,以便在必要时转发到 contentPane
。”—JFrame
正确;在一些教程中仍然可以看到原始公式。以上是关于JFrame 不显示任何组件的主要内容,如果未能解决你的问题,请参考以下文章
大于 JFrame 的可拖动组件(JScrollPane,每侧都有不可见的滚动条)