Java组件不显示+布局问题

时间:2014-06-20 21:44:16

标签: java user-interface layout jframe jpanel

我有几个问题:

首先,最重要的是,为什么你可以多次运行带有框架,几个面板,按钮等的GUI程序 - 不做任何改动 - 一半的时间组件显示在框架中,另一半什么时候没有显示...字面上,我在代码中没有任何改变,这是最令人沮丧的问题。有时出现的东西,有时没什么。我正在使用Eclipse,并在主方法中使用以下代码。

其次,有人可以清楚地解释框架,面板和布局是如何工作的吗?

JFrame f = new JFrame();
f.setSize(400, 400);
f.setLayout(new BorderLayout());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
f.setVisible(true);

JPanel p = new JPanel();
JButton alpha = new JButton();
JButton bravo = new JButton();
alpha.setLabel("Alpha");
bravo.setLabel("Bravo");
p.add(alpha, BorderLayout.WEST);
p.add(bravo, BorderLayout.EAST);
p.add(new JLabel("Charlie"), BorderLayout.SOUTH);
f.add(p);

上面的有时有效,当它没有按照Oracle页面和教程说明我的理解时。我创建了一个框架(没有默认布局),创建一个面板,其中两个按钮应该彼此相邻(WEST,EAST),然后在面板底部添加一个标签 - 并将整个面板添加到框架中。然而,它们都是在框架的顶部彼此相邻地添加,居中。

每个面板只能有一个组件吗?你可以在一个框架中添加多个面板,如果是这样,它们会重叠吗?

仅供参考我观看了YouTube视频,并在此处阅读了其他一些帖子,似乎没有什么能够简单彻底地解释基础知识,所以我认为论坛帖子会得到更好的解释。

由于

1 个答案:

答案 0 :(得分:5)

  

有时出现的东西,有时候什么都没有

添加完所有组件后,最后只需调用f.setVisible(true);


一些要点:

  1. 使用SwingUtilities.invokeLater()确保EDT已正确初始化。

    了解更多

  2. 致电f.pack()而非使用f.setSize(400, 400)

  3. JFrame默认使用BorderLayout,因此无需再次设置。


  4.   

    我观看了YouTube视频,并在此处阅读了其他一些帖子,似乎没有什么可以简单彻底地解释基础知识

    请查看The Swing Tutorial的以下部分,以便更好地了解JFrameLayout以及详细示例: