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 及其变体,removesetLayout 已被覆盖,以便在必要时转发到 contentPane。”—JFrame 正确;在一些教程中仍然可以看到原始公式。

以上是关于JFrame 不显示任何组件的主要内容,如果未能解决你的问题,请参考以下文章

大于 JFrame 的可拖动组件(JScrollPane,每侧都有不可见的滚动条)

在JFrame中显示数组

java swing问题:JFrame根面板不透明且可见,内容面板不透明且可见,层面板透明且可见,

java中jframe 和jpanel的区别

JFrame 中的所有组件均未显示

交换JPanel,第二个JPanel不显示