1 java layout user-interface jpanel jframe
我有几个问题:
首先,也是最重要的一点,为什么你可以多次运行带有框架,几个面板,按钮等的GUI程序 - 不做任何改动 - 一半时间组件显示在框架中,另一半时间什么都没有显示......从字面上看,我在代码中没有任何改变,这是最令人沮丧的问题.有时出现的东西,有时没什么.我正在使用Eclipse,并且在main方法中只有以下代码.
其次,有人可以清楚地解释框架,面板和布局如何工作?
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);
Run Code Online (Sandbox Code Playgroud)
上面的方法有时会起作用,当它出现时,它并没有说明我从Oracle页面和教程中理解的方式.我创建了一个框架(没有默认布局),创建一个面板,其中两个按钮应该彼此相邻(WEST,EAST),然后在面板底部添加一个标签 - 并将整个面板添加到框架中.然而,它们都在框架的顶部彼此相邻地添加,居中.
你每个面板只能有一个组件吗?你可以在一个框架中添加多个面板,如果是这样,它们是否重叠?
仅供参考我观看了YouTube视频,并在此处阅读了其他一些帖子,似乎没有什么能够简单彻底地解释基础知识,所以我认为论坛帖子会得到更好的解释.
谢谢
有时出现的东西,有时没什么
f.setVisible(true);添加完所有组件后,最后调用.
用于SwingUtilities.invokeLater()确保正确初始化EDT.
阅读更多
打电话f.pack()而不是使用f.setSize(400, 400).
JFrame默认情况下使用,BorderLayout所以不需要再次设置它.
我在这里观看了YouTube视频并阅读了其他一些帖子,似乎没有什么能够简单彻底地解释基础知识
请查看The Swing Tutorial的以下部分,以便更好地理解JFrame和Layout详细示例: