为什么我的JAVA GUI打开多个窗口?

问题描述 投票:0回答:1

我是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();


    }
}


java swing user-interface awt frame
1个回答
0
投票

正如人们已经对您说的那样,打开的帧数没有问题,我只是尝试了代码,它打开了一个JFrame。

我认为您的代码中存在一些错误:您不需要为此扩展JFrame并实现可序列化...这样,由于未使用继承的(未使用的)字段和方法,您使应用程序变得更重家长班。而且(正如其他人已经告诉您的那样),没有与JFrame链接的关闭操作,因此,当您按X按钮时,应用程序将一直运行直到关闭计算机。

为了避免出现这种情况,请添加以下语句:

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  • 我建议您将主方法,主对象和JPanel分开放置类,使您的应用程序更易于阅读,调试和维护。如果您打算拥有许多功能,那么最好有一个扩展JFrame的自定义类,您可以在其中组装不同的自定义GUI对象,每个对象都扩展一个Swing / AWT组件。最后在您的主对象中调用它们,或者直接在主要班级!对此没有限制,但是要明智地使用继承:许多类意味着更多的样板代码……总要权衡取舍!
  • 另一个好主意是将图形初始化(大小,颜色等)。只是创建类似`private void initializeGraphics(){...}
  • 之类的东西
  • 除此之外,将actionListeners映射到按钮,将它们放在单独的命名类中,或者至少放在一个像private void addListeners(){...}这样的单独方法在构造函数代码的末尾调用此函数。

我告诉你这是因为,当您在同一位置开始添加所有内容时,使用Swing时很容易出现5000行不可读且无法维护的代码!

祝您申请顺利:)

PS:看一下MigLayout ...我想您会喜欢它的,即使在开始时看起来似乎有点复杂。

© www.soinside.com 2019 - 2024. All rights reserved.