为什么我的JAVA GUI要打开多个窗口?
我是GUI新手,如果错误真的很明显,我很抱歉。 我试图用几个按钮创建一个简单的窗口,但每次运行代码时,它都会打开四个窗口,而不是一个。任何帮助都将不胜感激为什么我的JAVA GUI要打开多个窗口?,java,swing,user-interface,awt,frame,Java,Swing,User Interface,Awt,Frame,我是GUI新手,如果错误真的很明显,我很抱歉。 我试图用几个按钮创建一个简单的窗口,但每次运行代码时,它都会打开四个窗口,而不是一个。任何帮助都将不胜感激 public class CISUC extends JFrame implements Serializable { //interface JFrame mainFrame; JPanel mainPanel; JButton createProject, manageProject,listActive
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();
}
}
正如ohers已经告诉你的,打开的帧数没有问题,我只是尝试了代码,它打开了一个JFrame 在我看来,代码中有一些错误:您不需要为此扩展JFrame并实现serializable。。。这样,由于父类中未使用的继承(未使用)字段和方法,使应用程序变得更重。此外(正如其他人已经告诉您的),没有与JFrame链接的关闭操作,因此当您按下X按钮时,您的应用程序将一直运行,直到您关闭计算机 要避免这种情况,请添加以下语句:
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- 我建议您将main方法、main对象和JPanel放在单独的 类,使应用程序更易于阅读、调试和维护。如果您计划拥有许多功能,最好有一个扩展JFrame的自定义类,您可以在其中组装不同的自定义GUI对象,每个对象都扩展一个Swing/AWT组件。。最后在主对象中或直接在主类中调用它们!这没有限制,但要明智地使用继承:许多类意味着更多的样板代码。。。总有一个权衡李>
- 另一个好主意应该是将图形初始化(大小, 颜色等)在构造器外部使用单独的方法。只是 创建类似“private void initializeGraphics(){…}
- 除此之外,在将actionListeners映射到
按钮,将它们放在单独的命名类中,或者至少放在
单独的方法,如
,然后 在构造函数代码的末尾调用此函数private void addListeners(){…}
PS:请看一看MigLayout。。。我想你会喜欢它的,即使它在一开始看起来有点复杂。为什么
CISUC
扩展JFrame
并在其构造函数中创建一个新的JFrame
?它应该是一个JFrame
还是一个JFrame
?当我运行你的代码(修复语法错误后),它只会弹出一个带有5个按钮的框架。你到底是如何运行代码的?@azurefrog我只是在按NetBeans上的Run按钮。我希望它是一个JFrame
,因此我将把构造函数更改为super
callI刚才运行了您的代码。它只打开一个窗口。这里的问题是什么?需要注意的一点是,单击窗口上的X
不会停止应用程序,因为您没有处理它。所以你需要手动杀死它。@sunildaburi“所以你需要手动杀死它。”不,基于(正确的观察)的错误结论“因为你没有处理它”。为了正确地处理它,有时它就像调用一样简单。