LoginFrame extends JFrame // 登入視窗
MainFrame extends JFrame // 主視窗
Student implements Serializable // 學生實體
StudentDAO // 資料存取介面 (檔案/資料庫)
StudentTableModel extends AbstractTableModel // JTable 模型
btnLogin.addActionListener(e -> {
String user = txtUser.getText();
String pwd = new String(txtPwd.getPassword());
if (authenticate(user, pwd)) {
dispose(); // 關閉登入視窗
SwingUtilities.invokeLater(() -> new MainFrame().setVisible(true));
} else {
JOptionPane.showMessageDialog(LoginFrame.this, "帳號或密碼錯誤");
}
});
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("檔案");
fileMenu.add(new AbstractAction("新增") { public void actionPerformed(ActionEvent e) { clearForm(); }});
fileMenu.add(new AbstractAction("開啟") { public void actionPerformed(ActionEvent e) { loadFile(); }});
fileMenu.add(new AbstractAction("儲存") { public void actionPerformed(ActionEvent e) { saveFile(); }});
fileMenu.addSeparator();
fileMenu.add(new AbstractAction("離開") { public void actionPerformed(ActionEvent e) { System.exit(0); }});
menuBar.add(fileMenu);
setJMenuBar(menuBar);
class StudentTableModel extends AbstractTableModel {
private List<Student> data = new ArrayList<>();
private String[] cols = {"學號", "姓名", "性別", "出生日期", "電話"};
public int getRowCount() { return data.size(); }
public int getColumnCount() { return cols.length; }
public String getColumnName(int c) { return cols[c]; }
public Object getValueAt(int r, int c) { /* 依欄位回傳 */ }
// 提供 add/remove/update 方法並 fireTableRowsInserted/Updated/Deleted
}
CSDN 下載資源:Java Swing 登入+學生管理系統完整原始碼
從經典 Swing 入手掌握事件驅動、MVC 分層、TableModel 等核心概念,為後續遷移現代框架打下堅實基礎。