package view; import controller.MainController; import javax.swing.*; import java.awt.*; public class MainFrame extends JFrame { private MainController controller; public MainFrame(MainController controller) { this.controller = controller; initializeWindow(); createComponents(); setVisible(true); } private void initializeWindow() { setTitle("数学学习系统 - 主界面"); setSize(300, 250); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); setResizable(false); } private void createComponents() { JPanel panel = new JPanel(new GridLayout(5, 1, 10, 10)); panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); JLabel titleLabel = new JLabel("选择考试难度", JLabel.CENTER); titleLabel.setFont(new Font("微软雅黑", Font.BOLD, 16)); JButton primaryBtn = new JButton("小学"); JButton middleBtn = new JButton("初中"); JButton highBtn = new JButton("高中"); JButton logoutBtn = new JButton("退出登录"); // 设置按钮字体 Font buttonFont = new Font("微软雅黑", Font.PLAIN, 14); primaryBtn.setFont(buttonFont); middleBtn.setFont(buttonFont); highBtn.setFont(buttonFont); logoutBtn.setFont(buttonFont); // 设置按钮颜色 primaryBtn.setBackground(new Color(173, 216, 230)); // 浅蓝色 middleBtn.setBackground(new Color(144, 238, 144)); // 浅绿色 highBtn.setBackground(new Color(255, 182, 193)); // 浅粉色 logoutBtn.setBackground(new Color(240, 240, 240)); // 浅灰色 // 按钮事件监听 primaryBtn.addActionListener(e -> { setVisible(false); // 隐藏主界面 controller.startExam("小学"); }); middleBtn.addActionListener(e -> { setVisible(false); // 隐藏主界面 controller.startExam("初中"); }); highBtn.addActionListener(e -> { setVisible(false); // 隐藏主界面 controller.startExam("高中"); }); logoutBtn.addActionListener(e -> { int result = JOptionPane.showConfirmDialog( this, "确定要退出登录吗?", "确认退出", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE ); if (result == JOptionPane.YES_OPTION) { controller.logout(); } }); // 添加组件到面板 panel.add(titleLabel); panel.add(primaryBtn); panel.add(middleBtn); panel.add(highBtn); panel.add(logoutBtn); add(panel); } /** * 显示主界面(用于从考试界面返回时调用) */ public void showFrame() { setVisible(true); toFront(); // 确保窗口在前台 requestFocus(); // 请求焦点 } /** * 重写 dispose 方法,确保程序正确退出 */ @Override public void dispose() { super.dispose(); } }