java中jtable的用法

频道:网站相关 日期: 浏览:48

Java中JTable的用法

JTable概述

JTable是Java Swing库中的组件之一,用于在Java GUI应用程序中显示表格数据。它允许用户在矩形网格中显示和编辑数据。 JTable支持排序、过滤、列调整和其他常见的表格操作,并且可以与数据库或XML文件等外部数据源集成。

JTable的基本使用

java中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 comboBox;

public MajorEditor() {

super(new JComboBox());

comboBox = (JComboBox) editorComponent;

// 添加选项

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 sorter = new TableRowSorter(model);

// 将TableRowSorter对象设置为JTable的RowSorter

table.setRowSorter(sorter);

// 过滤年龄大于20的记录

RowFilter filter = new RowFilter() {

@Override

public boolean include(Entry 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)

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。