Java TableColumn添加值

在Java的Swing界面编程中,JTable是一个常用的组件,用于展示表格数据。在JTable中,TableColumn是表格的列控制器,它负责管理和控制每一列的表现形式和属性。本文将介绍如何使用Java TableColumn类来添加值到JTable中的列,并提供详细的代码示例。

TableColumn简介

TableColumn位于javax.swing.table包中,是JTable的一部分。它主要用于管理和控制JTable的列。通过TableColumn,我们可以设置列的宽度、排序器、渲染器、编辑器等属性。在JTable中,每一列都对应着一个TableColumn对象。

TableColumn的主要方法

在使用TableColumn添加值之前,我们需要了解一些TableColumn的常用方法:

  • setHeaderValue(Object headerValue):设置列的标题。
  • setPreferredWidth(int preferredWidth):设置列的首选宽度。
  • setCellRenderer(TableCellRenderer cellRenderer):设置列的单元格渲染器。
  • setCellEditor(TableCellEditor cellEditor):设置列的单元格编辑器。

示例代码

假设我们有一个名为"Student"的类,包含学生的姓名、年龄和成绩信息。我们希望通过TableColumn将这些信息添加到JTable中。

首先,我们需要创建一个包含表头和数据的二维数组,用于构建JTable:

Object[][] data = {
    {"Alice", 18, 90.0},
    {"Bob", 19, 85.5},
    {"Charlie", 20, 95.0},
    {"David", 21, 80.0}
};

String[] columnNames = {"Name", "Age", "Score"};

JTable table = new JTable(data, columnNames);

接下来,我们创建TableColumn对象,并将其添加到JTable中:

// 创建TableColumn对象
TableColumn nameColumn = new TableColumn();
TableColumn ageColumn = new TableColumn();
TableColumn scoreColumn = new TableColumn();

// 设置列的标题
nameColumn.setHeaderValue("Name");
ageColumn.setHeaderValue("Age");
scoreColumn.setHeaderValue("Score");

// 设置列的首选宽度
nameColumn.setPreferredWidth(100);
ageColumn.setPreferredWidth(50);
scoreColumn.setPreferredWidth(80);

// 添加列到JTable中
table.addColumn(nameColumn);
table.addColumn(ageColumn);
table.addColumn(scoreColumn);

现在,我们已经成功地将TableColumn添加到了JTable中。但是,我们还没有设置列的单元格渲染器和编辑器。

接下来,我们创建一个自定义的单元格渲染器,用于将学生的成绩信息以百分制的形式显示出来:

// 自定义单元格渲染器
class ScoreRenderer extends DefaultTableCellRenderer {
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        // 将成绩信息转换为百分制的形式
        DecimalFormat decimalFormat = new DecimalFormat("0.00");
        String formattedScore = decimalFormat.format(value);

        // 调用父类方法进行渲染
        return super.getTableCellRendererComponent(table, formattedScore, isSelected, hasFocus, row, column);
    }
}

然后,我们将自定义的渲染器应用到"Score"列上:

// 设置"Score"列的单元格渲染器
scoreColumn.setCellRenderer(new ScoreRenderer());

现在,当我们在JTable中显示学生的成绩信息时,它们将以百分制的形式进行渲染。

最后,我们可以创建一个自定义的单元格编辑器,用于对学生的年龄信息进行编辑:

// 自定义单元格编辑器
class AgeEditor extends DefaultCellEditor {
    public AgeEditor() {
        super(new JTextField());
    }
}

接着,我们将自定义的编辑器应用到"Age"列上:

// 设置"Age"列的单元格编辑器
ageColumn.setCellEditor(new AgeEditor());

现在,当我们点击"Age"列的单元格并进行编辑时,将会显示一个文本框,用于修改学生的年龄信息。

完整代码示例

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultCellEditor;
import javax.swing.table.TableColumn;
import java.awt.*;
import java.text.DecimalFormat;

public class