我是 GUI 新手,如果错误真的很明显,我很抱歉。 我试图创建一个带有几个按钮的简单窗口,但每次运行代码时,它都会打开四个窗口,而不是一个。任何帮助将不胜感激。
public class CISUC extends JFrame implements Serializable {
//interface
JFrame mainFrame;
JPanel mainPanel;
JButton createProject, manageProject,listActive, listUnfinished,listaFinished;
public CISUC(){
//interface
mainFrame = new JFrame();
mainFrame.setResizable(false);
mainPanel = new JPanel();
mainPanel.setLayout(new GridLayout(2,3));
createProject= new JButton("Create Project");
mainPanel.add(createProject);
manageProject = new JButton("Manage Project");
mainPanel.add(manageProject);
listActive = new JButton("List Active Projects");
mainPanel.add(listActive);
listUnfinished = new JButton("List Unfinished Projects");
mainPanel.add(listUnfinished);
listFinished = new JButton("Listar Finished");
mainPanel.add(listFinished);
mainFrame.setSize(800, 500);
mainFrame.add(mainPanel);
mainFrame.setVisible(true);
}
public static void main(String[] args) {
CISUC cisuc = new CISUC();
}
}
最佳答案
正如其他人已经对您说过的那样,打开的框架数量没有任何问题,我只是尝试了代码,它打开了一个 JFrame。
在我看来,您的代码中存在一些错误:您不需要为此目的扩展 JFrame 并实现可序列化...这样,由于未使用的继承(未使用)字段和方法,您的应用程序就会变得更重来自父类。此外(正如其他人已经告诉您的那样),没有与您的 JFrame 链接的关闭操作,因此当您按下 X 按钮时,您的应用程序将继续运行,直到您关闭计算机。
要避免这种情况,只需添加以下语句:
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- 我建议你将 main 方法、main Object 和 JPanel 分开放置 类,使您的应用程序更易于阅读、调试和维护。如果您计划拥有许多功能,那么拥有一个扩展 JFrame 的自定义类可能是一个好主意,您可以在其中组装不同的自定义 GUI 对象,每个对象都扩展一个 Swing/AWT 组件..最后在主对象中调用它们或直接在主课上!对此没有限制,但要明智地使用继承:许多类意味着更多的样板代码......总是需要权衡!
- 另一个好主意应该是进行图形初始化(大小, 颜色等...)在构造函数之外的单独方法中。只是 创建类似“private voidinitializeGraphics(){...}”的内容
- 除此之外,您可以在将 actionListener 映射到
按钮,将它们放在单独的命名类中或至少放在
像
private void addListeners(){...}
这样的单独方法,并且只是 在构造函数代码末尾调用此函数。
我告诉你这一点是因为使用 Swing 时,如果你开始在同一个地方添加所有内容,很容易出现 5000 行不可读且无法维护的代码!
祝您申请顺利:)
PS:看看 MigLayout...我想你会喜欢它,即使一开始看起来有点复杂。
关于java - 为什么我的 JAVA GUI 打开多个窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59275026/