我有几个问题:
首先,最重要的是,为什么你可以多次运行带有框架,几个面板,按钮等的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视频,并在此处阅读了其他一些帖子,似乎没有什么能够简单彻底地解释基础知识,所以我认为论坛帖子会得到更好的解释。
由于
答案 0 :(得分:5)
有时出现的东西,有时候什么都没有
添加完所有组件后,最后只需调用f.setVisible(true);
。
使用SwingUtilities.invokeLater()
确保EDT已正确初始化。
了解更多
致电f.pack()
而非使用f.setSize(400, 400)
。
JFrame
默认使用BorderLayout
,因此无需再次设置。
我观看了YouTube视频,并在此处阅读了其他一些帖子,似乎没有什么可以简单彻底地解释基础知识
请查看The Swing Tutorial的以下部分,以便更好地了解JFrame
和Layout
以及详细示例: