Java Swing中Table内容如何更改

在Java Swing中,Table是一个常用的UI组件,用于展示和编辑数据。在某些情况下,我们可能需要根据特定需求更改Table的内容,如添加、删除或更新数据。本文将介绍一种解决方案来实现这些功能。

问题描述

假设我们有一个需求,在Table中展示一个学生的成绩信息,包括学生姓名和对应的科目成绩。我们希望能够通过一个界面来添加、删除和更新学生的成绩信息。

解决方案

为了实现这个需求,我们可以使用Java Swing中的JTable组件,并结合TableModel来实现内容的更改。下面是一个具体的实现方案:

1. 创建TableModel

首先,我们需要创建一个TableModel来存储学生的成绩信息。TableModel是一个接口,用于定义Table中数据的结构和行为。我们可以自定义一个类实现TableModel接口,并提供相应的方法来处理数据的增删改查。

public class StudentTableModel extends AbstractTableModel {
    private List<Student> students;
    private String[] columns = {"姓名", "科目成绩"};

    public StudentTableModel(List<Student> students) {
        this.students = students;
    }

    @Override
    public int getRowCount() {
        return students.size();
    }

    @Override
    public int getColumnCount() {
        return columns.length;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Student student = students.get(rowIndex);
        if (columnIndex == 0) {
            return student.getName();
        } else if (columnIndex == 1) {
            return student.getScore();
        }
        return null;
    }

    @Override
    public String getColumnName(int column) {
        return columns[column];
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return true; // 允许编辑单元格内容
    }

    @Override
    public void setValueAt(Object value, int rowIndex, int columnIndex) {
        // 更新单元格内容
        Student student = students.get(rowIndex);
        if (columnIndex == 0) {
            student.setName((String) value);
        } else if (columnIndex == 1) {
            student.setScore((double) value);
        }
        fireTableCellUpdated(rowIndex, columnIndex);
    }

    // 其他辅助方法...
}

在上面的代码中,我们自定义了一个StudentTableModel类,用于存储学生的成绩信息。这个类继承自AbstractTableModel,并实现了相应的方法来处理Table的数据。我们可以根据需要自定义其他方法,如添加、删除学生信息等。

2. 创建JTable并绑定TableModel

接下来,我们需要创建一个JTable,并将之前创建的TableModel与之绑定。

List<Student> students = new ArrayList<>();
students.add(new Student("张三", 90));
students.add(new Student("李四", 85));

StudentTableModel tableModel = new StudentTableModel(students);
JTable table = new JTable(tableModel);

在上面的代码中,我们首先创建一个List来存储学生信息。然后,创建一个StudentTableModel,并将之前创建的List传递给它。最后,创建一个JTable,并将TableModel与之绑定。

3. 添加、删除和更新数据

有了上面的代码,我们已经可以展示学生的成绩信息,接下来我们可以实现添加、删除和更新数据的功能。

// 添加学生信息
tableModel.addRow(new Student("王五", 95));

// 删除学生信息
int rowIndex = table.getSelectedRow();
if (rowIndex != -1) {
    tableModel.removeRow(rowIndex);
}

// 更新学生信息
int rowIndex = table.getSelectedRow();
int columnIndex = table.getSelectedColumn();
if (rowIndex != -1 && columnIndex != -1) {
    tableModel.setValueAt(newValue, rowIndex, columnIndex);
}

在上面的代码中,我们可以通过调用TableModel的相应方法来实现添加、删除和更新数据的功能。其中,addRow方法用于添加一行数据,removeRow方法用于删除选中的行数据,setValueAt方法用于更新选中的单元格数据。

4. 显示Table

最后,我们需要将JTable添加到一个容器中,并显示出来。

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JScrollPane(table));
frame.pack();
frame.setVisible(true);

在上面的代码中,我们创建了一个