📅  最后修改于: 2023-12-03 15:01:32.567000             🧑  作者: Mango
Java Swing是Java语言用于创建GUI应用程序的一套GUI工具包。其中,JTable是Swing中用于展示表格数据的控件。它可以支持多种数据类型和格式化的单元格,并提供了排序、过滤等常用功能,是开发企业级应用时常用的组件之一。
创建JTable控件有多种方式,其中最常用的是使用JTable的构造函数:
JTable table = new JTable(data, columnNames);
其中,参数data是一个二维数组,存储了表格中的数据,columnNames是一个字符串数组,存储了表格中每一列的名称。
将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.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应用程序。