Java JFrame调用正在打开两个JFrame

Java JFrame调用正在打开两个JFrame,java,swing,jframe,jpanel,jbutton,Java,Swing,Jframe,Jpanel,Jbutton,我创建了一个类,它生成一个StartUpWindow对象。其中一个JButton组件关闭JFrame,然后调用一种新的要实例化的帧类型,AdminMainWindow。但是,当实例化AdminMainWindow时,会打开两个框架 有人能看到我代码中的错误吗 Main StartUpWindow AdminMain窗口 在第一个窗口中单击“Admin”按钮,它将打开一个AdminMain窗口JFrame,而两个窗口正在生成。您已经两次添加了addActionListener事件。移除setAct

我创建了一个类,它生成一个
StartUpWindow
对象。其中一个
JButton
组件关闭
JFrame
,然后调用一种新的要实例化的帧类型,
AdminMainWindow
。但是,当实例化
AdminMainWindow
时,会打开两个框架

有人能看到我代码中的错误吗

Main
StartUpWindow
AdminMain窗口

在第一个窗口中单击“Admin”按钮,它将打开一个
AdminMain窗口
JFrame
,而两个窗口正在生成。

您已经两次添加了
addActionListener
事件。移除
setAction(),然后应用程序应按预期运行

  • 在构造函数中添加第一次
  • 创建按钮并将其添加到框架时,将添加第二次

  • “调用新类型的JFrame”请参见1)使用缩进代码行和代码块的逻辑和一致形式。缩进的目的是使代码的流程更易于遵循!大多数IDE都有专门用于格式化代码的键盘快捷键。2) 请对代码和代码片段、结构化文档(如HTML/XML或输入/输出)使用代码格式。要做到这一点,请选择文本并单击消息发布/编辑表单顶部的
    {}
    按钮。感谢@Andrew Thompson的建议,但我确实用intellij格式化了它-当我在这里添加它时,它要求我做四个缩进,因为我在IDE中使用了标准格式,我不确定它是什么意思。可能是我在里面的评论。啊!我怎么会错过呢!谢谢@Butiri DanPlease,如果这有助于解决问题的话。
    public class Main {
    
        public static void main(String[] args) {
            StartUpWindow startUpWindow = new StartUpWindow();
        }
    }
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class StartUpWindow extends JFrame implements ActionListener {
    
        private JButton admin;
        private JButton captain;
        private JButton grades;
    
        public StartUpWindow() {
            setTitle("Start Up Menu");
            setButtons();
            setAction();
            setSize(200, 400);
            setVisible(true);
        }
    
        void setButtons() {
    
            admin = new JButton("Admin");
            captain = new JButton("Captain");
            grades = new JButton("Grades");
            getContentPane().setLayout(new FlowLayout());
            add(admin);
            add(captain);
            add(grades);
            setAction();
        }
    
        void setAction() {
            admin.addActionListener(this);
            captain.addActionListener(this);
            grades.addActionListener(this);
    
        }
    
        public void actionPerformed(ActionEvent eve) {
    
            if (eve.getSource() == admin)
                createAdminMainWindow();
            else if (eve.getSource() == captain)
                createCaptainMainWindow();
            else if (eve.getSource() == grades)
                createGradesMainWindow();
    
        }
    
        void createAdminMainWindow() {
            this.dispose();
            AdminMainWindow adminMainWindow = new AdminMainWindow();
        }
    
        void createCaptainMainWindow() {
            this.dispose();
            //this.adminMainWindow = new CaptainMainWindow();
        }
    
        void createGradesMainWindow() {
            this.dispose();
            //this.adminMainWindow = new GradesMainWindow();
        }
    }
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    
    public class AdminMainWindow extends JFrame implements ActionListener {
    
        private JMenuItem add;
        private JMenuItem edit;
        private JMenuItem delete;
        private JMenuItem view;
        private JMenuItem viewAll;
        private JTextField jt;
    
        public AdminMainWindow() {
            setTitle("JMenuBar_test");
            setJMenuBarAndMenuBarItems();
            setAction();
            setJTextField();
            setSize(1400, 600);
            setVisible(true);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    
        void setJTextField() {
            jt = new JTextField(10);
            add(jt);
        }
    
        void setJMenuBarAndMenuBarItems() {
            JMenuBar menuBar = new JMenuBar();
            JMenu menu1 = new JMenu("Edit");
            add = new JMenuItem("Add");
            edit = new JMenuItem("Edit");
            delete = new JMenuItem("Delete");
            JMenu menu2 = new JMenu("View");
            viewAll = new JMenuItem("View All Entries");
            view = new JMenuItem("View Entry");
            menu1.add(add);
            menu1.add(edit);
            menu1.add(delete);
            menu2.add(viewAll);
            menu2.add(view);
            menuBar.add(menu1);
            menuBar.add(menu2);
            setJMenuBar(menuBar);
        }
    
    
        void setAction() {
            add.addActionListener(this);
            edit.addActionListener(this);
            delete.addActionListener(this);
            viewAll.addActionListener(this);
            view.addActionListener(this);
        }
    
        JFrame setJTextField(JFrame jFrame) {
            JTextField jt = new JTextField(10);
            jFrame.add(jt);
            return jFrame;
        }
    
        public void actionPerformed(ActionEvent eve) {
            if (eve.getSource() == add)
                jt.setText("Add");
            else if (eve.getSource() == edit)
                jt.setText("Edit");
            else if (eve.getSource() == delete)
                jt.setText("Delete");
            else if (eve.getSource() == viewAll)
                jt.setText("ViewAll");
            else if (eve.getSource() == view)
                jt.setText("ViewOne");
        }
    }
    
    public StartUpWindow() {
        setTitle("Start Up Menu");
        setButtons();
    -- Here -->    setAction();
        setSize(200, 400);
        setVisible(true);
    }
    
    void setButtons() {
        admin = new JButton("Admin");
        captain = new JButton("Captain");
        grades = new JButton("Grades");
    
        getContentPane().setLayout(new FlowLayout());
        add(admin);
        add(captain);
        add(grades);
    -- Here -->    setAction();
    }