用jtable写一个关于学生成绩的包含学号姓名各科成绩平均分总分的表格可录入的那种java类
时间: 2024-03-06 19:49:48 浏览: 58
好的,以下是一个使用 JTable 组件展示学生成绩并且可以录入的 Java 类示例:
```java
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class StudentGradeTable extends JTable {
public StudentGradeTable() {
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;
}
}
};
// 添加计算总分和平均分的监听器
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);
}
});
setModel(model);
}
public static void main(String[] args) {
JTable table = new StudentGradeTable();
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(100);
table.getColumnModel().getColumn(1).setPreferredWidth(150);
for (int i = 2; i <= 6; i++) {
table.getColumnModel().getColumn(i).setPreferredWidth(80);
}
new TableFrame(table);
}
}
```
这个示例创建了一个继承自 JTable 的 StudentGradeTable 类,使用 DefaultTableModel 实现表格数据模型,并覆盖 isCellEditable 方法,允许编辑成绩列。使用 getColumnClass 方法设置表格列的数据类型。添加 TableModelListener 监听器,当成绩数据发生变化时,自动计算总分和平均分,并更新表格显示。
在 main 方法中,创建了一个 StudentGradeTable 对象,设置表格列宽度并将其添加到 TableFrame 中,TableFrame 类可以自行实现。
这个示例中,表格的数据和列名都是在类中直接指定的,实际使用时可以将其替换成从数据库或其他数据源获取的数据。
阅读全文