控制FormPanel不可编辑

本文介绍了一种在ExtJS框架中禁用FormPanel的方法。主要包括为FormPanel添加蒙版及循环禁用其上的所有控件。同时提供了启用FormPanel及控件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

控制FormPanel不可编辑

1、加蒙版 formPanel.el.mask(); //mask方法还可以加参数(“加载中。。。”,“x-loading-mask”)

formModule.el.unmask();//去掉mask

2、循环panel上的控件disabled

formModule.form.items.each(function(item){

item.disable();


});

//enable

formModule.form.items.each(function(item){

item.enable();

});
package com.student.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.student.entity.Student; import com.student.util.DBUtil; public class StudentDAO { // 插入学生 public void insertStudent(Student student) { String sql = "INSERT INTO students (sid, name, age, score) VALUES (?, ?, ?, ?)"; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, student.getSid()); pstmt.setString(2, student.getName()); pstmt.setInt(3, student.getAge()); pstmt.setDouble(4, student.getScore()); pstmt.executeUpdate(); } catch (SQLException e) { System.err.println("插入学生信息时出现错误: " + e.getMessage()); } } // 获取所有学生 public List<Student> getAllStudents() { List<Student> students = new ArrayList<>(); String sql = "SELECT * FROM students"; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery()) { while (rs.next()) { students.add(extractStudentFromResultSet(rs)); } } catch (SQLException e) { e.printStackTrace(); } return students; } // 删除学生(修改方法名) public void deleteStudent(String sid) { // 这里修改了方法名 String sql = "DELETE FROM students WHERE sid = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, sid); int rowsAffected = pstmt.executeUpdate(); if (rowsAffected == 0) { System.err.println("未找到学号为 " + sid + " 的学生"); } } catch (SQLException e) { e.printStackTrace(); } } // 更新学生信息 public void updateStudent(Student student) { String sql = "UPDATE students SET name = ?, age = ?, score = ? WHERE sid = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, student.getName()); pstmt.setInt(2, student.getAge()); pstmt.setDouble(3, student.getScore()); pstmt.setString(4, student.getSid()); int rowsAffected = pstmt.executeUpdate(); if (rowsAffected == 0) { System.err.println("未找到学号为 " + student.getSid() + " 的学生"); } } catch (SQLException e) { e.printStackTrace(); } } // 搜索学生 public List<Student> searchStudents(String keyword) { List<Student> students = new ArrayList<>(); String sql = "SELECT * FROM students WHERE sid LIKE ? OR name LIKE ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { String searchPattern = "%" + keyword + "%"; pstmt.setString(1, searchPattern); pstmt.setString(2, searchPattern); try (ResultSet rs = pstmt.executeQuery()) { while (rs.next()) { students.add(extractStudentFromResultSet(rs)); } } } catch (SQLException e) { e.printStackTrace(); } return students; } // 排序学生 public List<Student> getStudentsOrderBy(String field) { List<Student> students = new ArrayList<>(); String validField = validateSortField(field); String sql = "SELECT * FROM students ORDER BY " + validField; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery()) { while (rs.next()) { students.add(extractStudentFromResultSet(rs)); } } catch (SQLException e) { e.printStackTrace(); } return students; } // 根据ID获取学生 public Student getStudentById(String sid) { String sql = "SELECT * FROM students WHERE sid = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, sid); try (ResultSet rs = pstmt.executeQuery()) { if (rs.next()) { return extractStudentFromResultSet(rs); } } } catch (SQLException e) { e.printStackTrace(); } return null; } // 验证排序字段(防止SQL注入) private String validateSortField(String field) { String[] validFields = {"sid", "name", "age", "score"}; for (String valid : validFields) { if (valid.equalsIgnoreCase(field)) { return valid; } } return "sid"; // 默认值 } // 从ResultSet提取学生对象(复用代码) private Student extractStudentFromResultSet(ResultSet rs) throws SQLException { String sid = rs.getString("sid"); String name = rs.getString("name"); int age = rs.getInt("age"); double score = rs.getDouble("score"); return new Student(sid, name, age, score); } } package com.student.ui; import com.student.dao.StudentDAO; import com.student.entity.Student; import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.util.List; public class StudentGUI extends JFrame { private JTable studentTable; private DefaultTableModel tableModel; private StudentDAO studentDAO = new StudentDAO(); private JTextField searchField; private JComboBox<String> sortComboBox; public StudentGUI() { setTitle("学生信息管理系统"); setSize(900, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置淡蓝色背景 getContentPane().setBackground(new Color(230, 240, 255)); // 创建表格 String[] columns = {"学号", "姓名", "年龄", "成绩"}; tableModel = new DefaultTableModel(columns, 0) { @Override public boolean isCellEditable(int row, int column) { return false; // 禁止表格直接编辑 } }; studentTable = new JTable(tableModel); studentTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 创建功能面板 JPanel controlPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); controlPanel.setBackground(new Color(230, 240, 255)); // 搜索组件 searchField = new JTextField(15); JButton searchBtn = new JButton("查找"); searchBtn.addActionListener(e -> searchStudents()); controlPanel.add(new JLabel("搜索:")); controlPanel.add(searchField); controlPanel.add(searchBtn); // 排序组件 sortComboBox = new JComboBox<>(new String[]{"学号", "姓名", "年龄", "成绩"}); JButton sortBtn = new JButton("排序"); sortBtn.addActionListener(e -> sortStudents()); controlPanel.add(new JLabel("排序:")); controlPanel.add(sortComboBox); controlPanel.add(sortBtn); // 操作按钮 JButton addBtn = new JButton("添加学生"); addBtn.addActionListener(e -> showAddDialog()); JButton editBtn = new JButton("修改"); editBtn.addActionListener(e -> showEditDialog()); JButton deleteBtn = new JButton("删除"); deleteBtn.addActionListener(e -> deleteStudent()); // 添加按钮到面板 JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); buttonPanel.setBackground(new Color(230, 240, 255)); buttonPanel.add(addBtn); buttonPanel.add(editBtn); buttonPanel.add(deleteBtn); // 主布局 JPanel mainPanel = new JPanel(new BorderLayout(10, 10)); mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); mainPanel.setBackground(new Color(230, 240, 255)); mainPanel.add(controlPanel, BorderLayout.NORTH); mainPanel.add(new JScrollPane(studentTable), BorderLayout.CENTER); mainPanel.add(buttonPanel, BorderLayout.SOUTH); setContentPane(mainPanel); refreshTable(); } // 添加学生对话框 private void showAddDialog() { JDialog dialog = new JDialog(this, "添加学生", true); dialog.setSize(300, 250); dialog.setLayout(new BorderLayout()); dialog.getContentPane().setBackground(new Color(230, 240, 255)); JPanel formPanel = createFormPanel(); JButton saveBtn = new JButton("保存"); // 获取表单字段 JTextField sidField = (JTextField) formPanel.getComponent(1); JTextField nameField = (JTextField) formPanel.getComponent(3); JTextField ageField = (JTextField) formPanel.getComponent(5); JTextField scoreField = (JTextField) formPanel.getComponent(7); saveBtn.addActionListener(e -> { try { Student student = new Student( sidField.getText(), nameField.getText(), Integer.parseInt(ageField.getText()), Double.parseDouble(scoreField.getText()) ); studentDAO.insertStudent(student); refreshTable(); dialog.dispose(); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(this, "请输入有效的数字", "错误", JOptionPane.ERROR_MESSAGE); } }); dialog.add(formPanel, BorderLayout.CENTER); dialog.add(saveBtn, BorderLayout.SOUTH); dialog.setVisible(true); } // 修改学生对话框 private void showEditDialog() { int selectedRow = studentTable.getSelectedRow(); if (selectedRow == -1) { JOptionPane.showMessageDialog(this, "请先选择要修改的学生", "提示", JOptionPane.WARNING_MESSAGE); return; } String sid = (String) tableModel.getValueAt(selectedRow, 0); Student student = studentDAO.getStudentById(sid); JDialog dialog = new JDialog(this, "修改学生信息", true); dialog.setSize(300, 250); dialog.setLayout(new BorderLayout()); dialog.getContentPane().setBackground(new Color(230, 240, 255)); JPanel formPanel = createFormPanel(); // 填充当前数据 ((JTextField) formPanel.getComponent(1)).setText(student.getSid()); ((JTextField) formPanel.getComponent(3)).setText(student.getName()); ((JTextField) formPanel.getComponent(5)).setText(String.valueOf(student.getAge())); ((JTextField) formPanel.getComponent(7)).setText(String.valueOf(student.getScore())); // 学号不可编辑 ((JTextField) formPanel.getComponent(1)).setEditable(false); JButton saveBtn = new JButton("保存"); saveBtn.addActionListener(e -> { try { student.setName(((JTextField) formPanel.getComponent(3)).getText()); student.setAge(Integer.parseInt(((JTextField) formPanel.getComponent(5)).getText())); student.setScore(Double.parseDouble(((JTextField) formPanel.getComponent(7)).getText())); studentDAO.updateStudent(student); refreshTable(); dialog.dispose(); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(this, "请输入有效的数字", "错误", JOptionPane.ERROR_MESSAGE); } }); dialog.add(formPanel, BorderLayout.CENTER); dialog.add(saveBtn, BorderLayout.SOUTH); dialog.setVisible(true); } // 创建表单面板(复用) private JPanel createFormPanel() { JPanel formPanel = new JPanel(new GridLayout(4, 2, 5, 10)); formPanel.setBackground(new Color(230, 240, 255)); formPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); formPanel.add(new JLabel("学号:")); formPanel.add(new JTextField()); formPanel.add(new JLabel("姓名:")); formPanel.add(new JTextField()); formPanel.add(new JLabel("年龄:")); formPanel.add(new JTextField()); formPanel.add(new JLabel("成绩:")); formPanel.add(new JTextField()); return formPanel; } // 删除学生 private void deleteStudent() { int selectedRow = studentTable.getSelectedRow(); if (selectedRow == -1) { JOptionPane.showMessageDialog(this, "请先选择要删除的学生", "提示", JOptionPane.WARNING_MESSAGE); return; } int confirm = JOptionPane.showConfirmDialog( this, "确定要删除该学生吗?", "确认删除", JOptionPane.YES_NO_OPTION ); if (confirm == JOptionPane.YES_OPTION) { String sid = (String) tableModel.getValueAt(selectedRow, 0); studentDAO.deleteStudent(sid); refreshTable(); } } // 搜索学生 private void searchStudents() { String keyword = searchField.getText().trim(); if (keyword.isEmpty()) { refreshTable(); return; } List<Student> students = studentDAO.searchStudents(keyword); updateTable(students); } // 排序学生 private void sortStudents() { String sortBy = (String) sortComboBox.getSelectedItem(); String sortField = ""; switch (sortBy) { case "学号": sortField = "sid"; break; case "姓名": sortField = "name"; break; case "年龄": sortField = "age"; break; case "成绩": sortField = "score"; break; } List<Student> students = studentDAO.getStudentsOrderBy(sortField); updateTable(students); } // 刷新表格 private void refreshTable() { List<Student> students = studentDAO.getAllStudents(); updateTable(students); } // 更新表格数据 private void updateTable(List<Student> students) { tableModel.setRowCount(0); for (Student s : students) { tableModel.addRow(new Object[]{s.getSid(), s.getName(), s.getAge(), s.getScore()}); } } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { StudentGUI gui = new StudentGUI(); gui.setVisible(true); }); } } 请根据这两个代码修改
最新发布
06-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值