📜  Java Swing-JTable(1)

📅  最后修改于: 2023-12-03 15:01:32.567000             🧑  作者: Mango

Java Swing-JTable介绍

简介

Java Swing是Java语言用于创建GUI应用程序的一套GUI工具包。其中,JTable是Swing中用于展示表格数据的控件。它可以支持多种数据类型和格式化的单元格,并提供了排序、过滤等常用功能,是开发企业级应用时常用的组件之一。

基本用法
创建JTable控件

创建JTable控件有多种方式,其中最常用的是使用JTable的构造函数:

JTable table = new JTable(data, columnNames);

其中,参数data是一个二维数组,存储了表格中的数据,columnNames是一个字符串数组,存储了表格中每一列的名称。

将JTable添加到窗口中

将JTable添加到窗口中也有多种方式,最常用的是使用JScrollPane将JTable包装起来:

JScrollPane scrollPane = new JScrollPane(jTable);

然后将JScrollPane添加到窗口中即可。

渲染器和编辑器

JTable可以通过设置渲染器和编辑器来自定义单元格的显示和编辑方式。渲染器和编辑器都是实现了TableCellRenderer和TableCellEditor接口的类。

// 设置渲染器
jTable.setDefaultRenderer(Object.class, new CustomRenderer());

// 设置编辑器
jTable.setDefaultEditor(Object.class, new CustomEditor());
监听JTable事件

JTable可以监听多种事件,如表格单元格的点击、编辑、选择等。

jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        // 处理选择事件
    }
});
高级用法
数据模型

JTable的数据模型是TableModel接口,提供了对表格数据的访问和操作。

public interface TableModel {
    int getRowCount();
    int getColumnCount();
    Object getValueAt(int rowIndex, int columnIndex);
    void setValueAt(Object aValue, int rowIndex, int columnIndex);
    String getColumnName(int columnIndex);
    Class<?> getColumnClass(int columnIndex);
    boolean isCellEditable(int rowIndex, int columnIndex);
    void addTableModelListener(TableModelListener l);
    void removeTableModelListener(TableModelListener l);
}
排序和过滤器

JTable可以使用TableRowSorter类实现表格数据的排序和过滤。

TableRowSorter<TableModel> sorter = new TableRowSorter<>(table.getModel());
sorter.setRowFilter(RowFilter.regexFilter(text));
table.setRowSorter(sorter);
单元格编辑

JTable默认使用JTextField作为单元格编辑器,但是我们也可以使用自定义的编辑器。

public class CustomCellEditor extends AbstractCellEditor implements TableCellEditor {
    private final JComboBox<String> comboBox;

    public CustomCellEditor() {
        comboBox = new JComboBox<>(new String[] {"A", "B", "C"});
    }

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        comboBox.setSelectedItem(value);
        return comboBox;
    }

    @Override
    public Object getCellEditorValue() {
        return comboBox.getSelectedItem();
    }
}
单元格渲染

JTable默认使用JLabel作为渲染器,但是我们也可以使用自定义的渲染器。

public class CustomCellRenderer extends DefaultTableCellRenderer {
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        c.setForeground(Color.RED);
        return c;
    }
}
结束语

以上就是Java Swing中JTable的介绍和基本用法,JTable作为一个非常常用的控件,在Java GUI开发中占有重要的地位。学好JTable可以帮助我们更加高效地开发出优秀的GUI应用程序。