如何解决Java Swing 如何正确使用 GridBagLayout 和 GridBagConstraints?
我在我的代码上应用 GridBagLayout 时遇到问题。我有两个版本的代码,一个有效,另一个无效。
这个不起作用:
public class Tutorial extends JFrame{
JButton button1,button2,button3,button4,button5;
JPanel panel;
GridBagConstraints grid;
public Tutorial() {
super("Java Program");
setVisible(true);
setSize(500,500);
setLocation(new Point(500,150));
setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
addComponents();
}
public void addComponents() {
panel = new JPanel();
grid = new GridBagConstraints();
panel.setLayout(new GridBagLayout());
button1 = new JButton();
button1.setText("Button 1");
grid.gridx = 0;
grid.gridy = 0;
panel.add(button1,grid);
button2 = new JButton();
button2.setText("Button 2");
grid.gridx = 1;
grid.gridy = 1;
panel.add(button2,grid);
button3 = new JButton();
button3.setText("Button 3");
grid.gridx = 2;
grid.gridy = 2;
panel.add(button3,grid);
button4 = new JButton();
button4.setText("Button 4");
grid.gridx = 3;
grid.gridy = 3;
panel.add(button4,grid);
button5 = new JButton();
button5.setText("Button 5");
grid.gridx = 4;
grid.gridy = 4;
panel.add(button5,grid);
panel.add(button1);
panel.add(button2);
panel.add(button3);
panel.add(button4);
panel.add(button5);
add(panel);
}
public static void main(String[] args) {
Tutorial frame = new Tutorial();
frame.setVisible(true);
}
}
为了提供一些上下文,我在观看一些教程时习惯了这种代码结构。我还注意到,当我使用 NetBeans 仅通过拖放组件来制作 GUI 时,代码结构与我目前使用的代码结构几乎相同,因此我尝试坚持这种编码结构。但问题是 GridBagLayout 对我的代码的影响不起作用,我不知道问题出在哪里,我有点需要解释一下。
所以这里我做了一个简单的,没有类变量、构造函数和方法,这个也可以工作:
public class TestClass {
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
GridBagConstraints grid = new GridBagConstraints();
JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 2");
JButton button3 = new JButton("Button 3");
JButton button4 = new JButton("Button 4");
JButton button5 = new JButton("Button 5");
frame.setVisible(true);
frame.setSize(500,300);
frame.setLocation(new Point(500,150));
frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
panel.setLayout(new GridBagLayout());
grid.gridx = 1;
grid.gridy = 1;
panel.add(button1,grid);
grid.gridx = 2;
grid.gridy = 2;
panel.add(button2,grid);
grid.gridx = 3;
grid.gridy = 3;
panel.add(button3,grid);
grid.gridx = 4;
grid.gridy = 4;
panel.add(button4,grid);
grid.gridx = 5;
grid.gridy = 5;
panel.add(button5,grid);
frame.add(panel);
}
}
所以基本上两者都是一样的,只是结构不同。
解决方法
注意方法 setVisible
应该在您添加所有组件后被调用。
在不起作用的代码中,您犯了一些错误。
- 您添加了两次按钮。一次带
GridBagConstraints
,一次不带。您只需添加一次组件。 - 您正在调用方法
setVisible
两次。一次在构造函数中,一次在方法main
中。您只需调用方法setVisible
一次。
看一些教程就习惯了这种代码结构
我推荐 Oracle 的教程:Creating a GUI With JFC/Swing。
当我使用 NetBeans 仅通过拖放组件来制作 GUI 时
如果您真的想学习Swing 编程,我建议不要使用 GUI 构建器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。