public class Main extends JFrame { public Main(){ JFrame frame1 = new JFrame("Cost of Parties"); JButton button_bir = new JButton("Birthday Party"); JButton button_di = new JButton("Dinner Party"); frame1.setLayout(new GridLayout(2,1)); frame1.add(button_bir,BorderLayout.CENTER); frame1.add(button_di,BorderLayout.CENTER); frame1.setVisible(true); frame1.setDefaultCloseOperation(DISPOSE_ON_CLOSE); } public static void main(String[] args) { Main m = new Main(); m.setVisible(true); } }这段代码为什么不能运行
时间: 2024-01-10 12:02:39 浏览: 79
这段代码存在一些问题:
1. 在构造方法中已经创建了一个 JFrame 实例 frame1,而在 main 方法中又创建了一个 Main 实例 m,默认情况下会再创建另一个 JFrame 实例并显示在屏幕上,因此会出现两个窗口的情况。
2. 在添加组件时,使用了 BorderLayout 布局管理器,但是在设置布局时却使用了 GridLayout 布局管理器,这会导致组件不能正确地布局。
以下是修改后的代码,可以正常运行:
```
public class Main extends JFrame {
public Main() {
super("Cost of Parties");
JButton button_bir = new JButton("Birthday Party");
JButton button_di = new JButton("Dinner Party");
JPanel panel = new JPanel(new GridLayout(2, 1));
panel.add(button_bir);
panel.add(button_di);
add(panel);
pack();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
Main m = new Main();
}
}
```
在这个修改后的代码中,我将构造方法中创建的 JFrame 实例去掉了,使用了 `super("Cost of Parties")` 来设置窗口的标题;使用了 JPanel 来作为容器,并使用了 GridLayout 布局管理器来布局组件;使用了 `pack()` 方法来自动设置窗口大小;使用了 `setLocationRelativeTo(null)` 来将窗口居中显示。
阅读全文