Java Swing按钮自动激活?窗口双向切换功能异常修复咨询
问题修复方案
核心问题分析
- 启动时自动弹出双窗口:构造函数里同时调用了
frame1.setVisible(true)和frame2.setVisible(true),导致程序一启动两个窗口直接全部显示。 - 事件逻辑嵌套错误:
back按钮的判断被包裹在total按钮的if块内部,点击back时永远不会触发对应的窗口切换逻辑。 - 窗口关闭规则冲突:两个窗口都设置了
EXIT_ON_CLOSE,关闭任意一个窗口会直接终止整个程序,不符合切换需求。
修复后的完整代码
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class IA2 implements ActionListener{ JButton total = new JButton(); JButton back = new JButton(); JFrame frame1 = new JFrame(); JFrame frame2 = new JFrame(); IA2(){ // 初始化第一个窗口 frame1.setTitle("Lab equipement"); frame1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame1.setLayout(null); frame1.setSize(500, 425); frame1.setResizable(false); frame1.getContentPane().setBackground(new Color(5, 25, 50)); // 初始化第二个窗口(默认隐藏) frame2.setTitle("Total Equipement"); frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame2.setLayout(null); frame2.setSize(500, 425); frame2.setResizable(false); frame2.getContentPane().setBackground(new Color(5, 25, 50)); // 配置total按钮 total.setBounds(50, 10, 150, 75); frame1.add(total); total.addActionListener(this); total.setText("Total Equipement"); total.setFocusable(false); // 配置back按钮 back.setBounds(50, 10, 150, 75); frame2.add(back); back.addActionListener(this); back.setText("Back"); back.setFocusable(false); // 启动时只显示第一个窗口 frame1.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == total) { frame1.dispose(); frame2.setVisible(true); } // 单独处理back按钮的事件逻辑 else if(e.getSource() == back) { frame2.dispose(); frame1.setVisible(true); } } public static void main(String[] args) { // 按Swing规范在事件调度线程启动GUI SwingUtilities.invokeLater(IA2::new); } }
关键修改说明
- 初始化只显主窗口:移除初始化时的
frame2.setVisible(true),仅在点击total按钮时才显示第二个窗口。 - 拆分事件判断逻辑:将back按钮的判断从total的if块中移出,改为独立的else if分支,确保点击back时能触发窗口切换。
- 调整窗口关闭行为:把
EXIT_ON_CLOSE改为DISPOSE_ON_CLOSE,关闭窗口仅释放当前窗口资源,不会直接退出程序。 - 线程安全启动GUI:通过
SwingUtilities.invokeLater启动程序,符合Swing的线程安全要求。
内容的提问来源于stack exchange,提问作者CoderInNeed
相关产品推荐
相关产品推荐

