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