用Java Swing编程 实验步骤 1. 实现页面菜单,菜单项包括按名字读取、按学号读取、按班级读取; 2. 实现搜索框,用于输入名字或学号,根据名字或学号查询学生信息; 3. 实现班级下拉列表,用于选择班级并按班级查询学生信息。 4. 实现学生信息展示功能,展示从数据库中查询到的学生信息;
时间: 2024-02-03 09:15:52 浏览: 32
好的,以下是具体的实验步骤:
1. 实现页面菜单
首先需要创建一个JMenuBar对象,然后在该对象上添加JMenu对象和JMenuItem对象。JMenu对象是菜单栏上的一级菜单,JMenuItem对象是菜单栏上的二级菜单,具体实现代码如下:
```java
JMenuBar menuBar = new JMenuBar(); // 创建菜单栏对象
JMenu fileMenu = new JMenu("文件"); // 创建一级菜单对象
JMenuItem nameItem = new JMenuItem("按名字读取"); // 创建二级菜单对象
JMenuItem idItem = new JMenuItem("按学号读取");
JMenuItem classItem = new JMenuItem("按班级读取");
fileMenu.add(nameItem); // 将二级菜单添加到一级菜单上
fileMenu.add(idItem);
fileMenu.add(classItem);
menuBar.add(fileMenu); // 将一级菜单添加到菜单栏上
```
2. 实现搜索框
可以通过创建一个JTextField对象来实现搜索框,当用户在搜索框中输入关键字后,可以通过监听JTextField对象的内容变化事件来触发查询操作。具体实现代码如下:
```java
JTextField searchField = new JTextField(20); // 创建搜索框对象
searchField.getDocument().addDocumentListener(new DocumentListener() { // 监听文本框内容变化事件
@Override
public void insertUpdate(DocumentEvent e) {
String keyword = searchField.getText(); // 获取搜索框中的关键字
// 根据关键字查询学生信息
List<Student> students = dao.queryByNameOrId(keyword);
// 更新学生信息展示区域的内容
updateStudentInfo(students);
}
@Override
public void removeUpdate(DocumentEvent e) {
// 同上
}
@Override
public void changedUpdate(DocumentEvent e) {
// 同上
}
});
```
3. 实现班级下拉列表
可以通过创建一个JComboBox对象来实现班级下拉列表,当用户选择某个班级后,可以通过监听JComboBox对象的选择事件来触发查询操作。具体实现代码如下:
```java
String[] classNames = dao.queryClassNames(); // 获取所有班级名称
JComboBox<String> classComboBox = new JComboBox<>(classNames); // 创建班级下拉列表
classComboBox.addItemListener(new ItemListener() { // 监听班级选择事件
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) { // 如果选择了某个班级
String className = (String) classComboBox.getSelectedItem();
// 根据班级名查询学生信息
List<Student> students = dao.queryByClassName(className);
// 更新学生信息展示区域的内容
updateStudentInfo(students);
}
}
});
```
4. 实现学生信息展示功能
可以通过创建一个JTable对象来实现学生信息的展示,需要首先创建一个TableModel对象来定义表格的结构,并且需要重写TableModel的方法来设置单元格的值。具体实现代码如下:
```java
String[] columnNames = {"姓名", "学号", "班级", "成绩"}; // 表格列名
Object[][] rowData = {}; // 表格数据
TableModel tableModel = new DefaultTableModel(rowData, columnNames) {
@Override
public boolean isCellEditable(int row, int column) {
return false; // 表格不可编辑
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Student student = students.get(rowIndex);
switch (columnIndex) {
case 0:
return student.getName();
case 1:
return student.getId();
case 2:
return student.getClassName();
case 3:
return student.getScore();
default:
return null;
}
}
};
JTable table = new JTable(tableModel); // 创建表格对象
```
其中,students是一个List<Student>类型的变量,用于存储从数据库中查询到的学生信息。在查询操作完成后,需要将查询到的学生信息更新到students中,然后调用tableModel的fireTableDataChanged()方法来通知表格更新内容,具体实现代码如下:
```java
private void updateStudentInfo(List<Student> students) {
this.students = students;
((DefaultTableModel) tableModel).setDataVector(convertData(students), columnNames);
}
private Object[][] convertData(List<Student> students) {
Object[][] data = new Object[students.size()][4];
for (int i = 0; i < students.size(); i++) {
Student student = students.get(i);
data[i][0] = student.getName();
data[i][1] = student.getId();
data[i][2] = student.getClassName();
data[i][3] = student.getScore();
}
return data;
}
```
最后,需要将创建的各个组件添加到窗口中,并设置窗口的大小、位置和可见性等属性,具体实现代码如下:
```java
JFrame frame = new JFrame("学生信息管理系统");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setJMenuBar(menuBar);
frame.setLayout(new BorderLayout());
frame.add(searchField, BorderLayout.NORTH);
frame.add(classComboBox, BorderLayout.WEST);
frame.add(new JScrollPane(table), BorderLayout.CENTER);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
```