Java中JTable的用法
JTable概述
JTable是Java Swing库中的组件之一,用于在Java GUI应用程序中显示表格数据。它允许用户在矩形网格中显示和编辑数据。 JTable支持排序、过滤、列调整和其他常见的表格操作,并且可以与数据库或XML文件等外部数据源集成。
JTable的基本使用
要使用JTable,需要创建一个TableModel对象,该对象代表表中的数据。TableModel是一个接口,开发人员可以使用AbstractTableModel来实现该接口。接下来,可以创建一个JTable对象,并将TableModel对象传递给它。将JTable添加到Swing容器中即可。以下是一个简单的示例程序,演示如何使用JTable:
```
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class JTableDemo extends JFrame {
public JTableDemo() {
setTitle("JTable Demo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 表头数据
String[] columnNames = {"姓名", "年龄", "性别"};
// 表格数据
Object[][] data = {
{"张三", 18, "男"},
{"李四", 20, "女"},
{"王五", 22, "男"}
};
// 创建TableModel对象
MyTableModel model = new MyTableModel(columnNames, data);
// 创建JTable对象
JTable table = new JTable(model);
// 将JTable添加到JScrollPane中
JScrollPane scrollPane = new JScrollPane(table);
// 将JScrollPane添加到JFrame中
add(scrollPane);
setSize(300, 200);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new JTableDemo();
}
// 实现TableModel接口
class MyTableModel implements TableModel {
// 实现接口中的方法
在以上示例程序中,MyTableModel类实现了TableModel接口。JTableDemo类创建了一个JTable对象,并将其添加到一个JScrollPane中,最后将JScrollPane添加到JFrame中。
JTable的常用功能
1. JTable的单元格渲染和编辑
JTable允许开发人员自定义单元格的渲染方式,以及是否允许用户编辑单元格。可以通过设置TableCellRenderer和TableCellEditor的实现类来实现这些功能。通过继承DefaultTableCellRenderer和DefaultCellEditor类,可以很方便地创建自定义的单元格渲染和编辑器。
以下是一个自定义单元格渲染和编辑器的示例程序:
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JComboBox;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
public class JTableRendererEditorDemo extends JFrame {
public JTableRendererEditorDemo() {
String[] columnNames = {"姓名", "年龄", "性别", "专业"};
{"张三", 18, "男", "计算机"},
{"李四", 20, "女", "软件工程"},
{"王五", 22, "男", "信息管理"}
DefaultTableModel model = new DefaultTableModel(data, columnNames);
// 设置第3列的单元格渲染
TableColumn column = table.getColumnModel().getColumn(2);
column.setCellRenderer(new GenderRenderer());
// 设置第4列的单元格编辑器
column = table.getColumnModel().getColumn(3);
column.setCellEditor(new MajorEditor());
// 调整列宽
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
setSize(400, 200);
new JTableRendererEditorDemo();
// 自定义单元格渲染器
class GenderRenderer extends DefaultTableCellRenderer {
@Override
public void setValue(Object value) {
// 设置单元格的值
if ("男".equals(value)) {
setText("♂");
} else if ("女".equals(value)) {
setText("♀");
} else {
setText("");
}
// 自定义单元格编辑器
class MajorEditor extends DefaultCellEditor {
JComboBox
public MajorEditor() {
super(new JComboBox
comboBox = (JComboBox
// 添加选项
comboBox.addItem("计算机");
comboBox.addItem("软件工程");
comboBox.addItem("信息管理");
在以上示例程序中,GenderRenderer类和MajorEditor类分别实现了TableCellRenderer和TableCellEditor接口,分别用于实现第3列单元格的渲染和第4列单元格的编辑。在JTableRendererEditorDemo类中,使用setCellRenderer()和setCellEditor()方法将自定义的渲染器和编辑器应用于指定的列上。
2. JTable的排序和过滤
JTable允许用户按列对数据进行排序,并支持使用RowFilter进行过滤。通过设置TableRowSorter和RowFilter的实现类,可以轻松实现这些功能。
以下是一个JTable排序和过滤的示例程序:
import javax.swing.RowFilter;
import javax.swing.table.TableRowSorter;
public class JTableSortFilterDemo extends JFrame {
public JTableSortFilterDemo() {
// 创建TableRowSorter对象
TableRowSorter
// 将TableRowSorter对象设置为JTable的RowSorter
table.setRowSorter(sorter);
// 过滤年龄大于20的记录
RowFilter
@Override
public boolean include(Entry extends TableModel, ? extends Integer> entry) {
// 获取当前行的数据
Object[] rowData = ((DefaultTableModel)entry.getModel()).getDataVector().get(entry.getIdentifier());
// 获取年龄列的值
int age = (int) rowData[1];
// 返回是否包含在过滤条件内
return age > 20;
}
sorter.setRowFilter(filter);
public static void main(String[] args
网友留言(0)