用jtable写一个关于学生成绩的包含学号姓名各科成绩平均分总分的表格可录入的那种
时间: 2024-03-06 11:49:41 浏览: 92
一个成绩表格制作
好的,以下是一个使用 JTable 组件展示学生成绩并且可以录入的例子:
```java
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class StudentGradeTable {
public static void main(String[] args) {
JFrame frame = new JFrame("学生成绩表格");
Object[][] data = {
{"1001", "张三", 80, 90, 70},
{"1002", "李四", 70, 85, 90},
{"1003", "王五", 90, 75, 80},
{"1004", "赵六", 85, 80, 95},
{"1005", "钱七", 95, 70, 85}
};
String[] columnNames = {"学号", "姓名", "语文", "数学", "英语", "总分", "平均分"};
DefaultTableModel model = new DefaultTableModel(data, columnNames) {
@Override
public boolean isCellEditable(int row, int column) {
// 允许编辑成绩列
return column >= 2 && column <= 4;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
// 第二列和最后两列为字符串类型,其余为整型
if (columnIndex == 1 || columnIndex == 5 || columnIndex == 6) {
return String.class;
} else {
return Integer.class;
}
}
};
JTable table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane);
// 添加计算总分和平均分的监听器
model.addTableModelListener(e -> {
int row = e.getFirstRow();
int column = e.getColumn();
if (column >= 2 && column <= 4) {
int chinese = (int) model.getValueAt(row, 2);
int math = (int) model.getValueAt(row, 3);
int english = (int) model.getValueAt(row, 4);
int total = chinese + math + english;
double average = (double) total / 3;
model.setValueAt(total, row, 5);
model.setValueAt(String.format("%.1f", average), row, 6);
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
```
这个例子创建了一个包含学生学号、姓名和三门科目成绩、总分、平均分的表格,使用 JTable 组件实现。使用 DefaultTableModel 实现表格数据模型,并覆盖 isCellEditable 方法,允许编辑成绩列。使用 getColumnClass 方法设置表格列的数据类型。添加 TableModelListener 监听器,当成绩数据发生变化时,自动计算总分和平均分,并更新表格显示。
阅读全文