swing表格的TableColumnModel和监听器
ableColumnModel和监听器 JTable使用TableColumnModel来保存该表格所有数据列的状态数据,如果程序需要访问JTable的所有列状态信息,则可以通过获取该JTable的 TableColumnModel来实现。TableColumnModel提供了如下几个方法来增加、删除和移动数据列:
1、addColumn(TableColumn aColumn):该方法用于为TableModel添加一列。该方法主要用于将原来隐藏的数据列显示出来
2、moveColumn(int columnIndex, int newIndex):该方法用于将指定列移动到其他位置
3、removeColumn(TableColumn column):该方法用于从TableModel中删除指定列。实际上,该方法并未真正删除指定列,只是将该列在TableColumnModel中隐藏起来,使之不可见
JTable中也提供了类似的方法完成列的操作,只是其底层依然是通过TableColumnModel来完成的
swing表格的TableColumnModel和监听器_练习
x
package ch30;
import javax.swing.*;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableColumn;import javax.swing.table.TableColumnModel;import java.awt.*;import java.util.ArrayList;
public class a_35_0swing_表格_TableColumnModel和监听器 {
JFrame mainWin = new JFrame("管理数据行、数据列"); final int COLUMN_COUNT = 5; DefaultTableModel model; JTable table; //用于保存被隐藏列的List集合 ArrayList<TableColumn> hiddenColumns = new ArrayList<>();
public void init() { //创建DefaultTableModel,5 行5列 model = new DefaultTableModel(COLUMN_COUNT, COLUMN_COUNT); //给每个单元格设置内容 for (int i = 0; i < COLUMN_COUNT; i++) { for (int j = 0; j < COLUMN_COUNT; j++) { model.setValueAt("老单元格值" + i + " " + j, i, j); } } //创建表格 table = new JTable(model); mainWin.add(new JScrollPane(table), BorderLayout.CENTER); //为窗口安装菜单 JMenuBar menuBar = new JMenuBar(); mainWin.setJMenuBar(menuBar); JMenu tableMenu = new JMenu("管理"); menuBar.add(tableMenu); JMenuItem hideColumnsItem = new JMenuItem("隐藏选中列"); hideColumnsItem.addActionListener(e -> { //获取所有选中列的索引 int[] selectedColumns = table.getSelectedColumns(); TableColumnModel columnModel = table.getColumnModel(); //依次把每个选中的列隐藏起来,并使用hideColumns集合把隐藏的列保存起来 for (int i = 0; i < selectedColumns.length; i++) { //获取列对象TableColumn TableColumn column = columnModel.getColumn(selectedColumns[i]); //隐藏指定列 table.removeColumn(column); //把隐藏的列保存起来,确保以后可以显示出来 hiddenColumns.add(column); } }); tableMenu.add(hideColumnsItem); JMenuItem showColumsItem = new JMenuItem("显示隐藏列"); showColumsItem.addActionListener(e -> { for (TableColumn column : hiddenColumns) { table.addColumn(column); } //清空隐藏列集合 hiddenColumns.clear(); }); tableMenu.add(showColumsItem); JMenuItem addColumnItem = new JMenuItem("插入选中列"); addColumnItem.addActionListener(e -> { //获取所有选中列的索引 int[] selectedColumns = table.getSelectedColumns(); TableColumnModel columnModel = table.getColumnModel(); //依次插入选中列 for (int i = selectedColumns.length - 1; i >= 0; i--) { TableColumn column = columnModel.getColumn(selectedColumns[i]); table.addColumn(column); } }); tableMenu.add(addColumnItem); JMenuItem addRowItem = new JMenuItem("增加行"); addRowItem.addActionListener(e -> { //创建一个String数组,作为新增行的内容 String[] newCells = new String[COLUMN_COUNT]; for (int i = 0; i < newCells.length; i++) { newCells[i] = "新单元格的值" + model.getRowCount() + " " + i; } //向table中新增一行 model.addRow(newCells); }); tableMenu.add(addRowItem); JMenuItem removeRowsItem = new JMenuItem("删除选中行"); removeRowsItem.addActionListener(e -> { //获取被选中的行 int[] selectedRows = table.getSelectedRows(); //依次删除每一行 for (int i = selectedRows.length - 1; i >= 0; i--) { model.removeRow(selectedRows[i]); } }); tableMenu.add(removeRowsItem); mainWin.pack(); mainWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainWin.setVisible(true); }
public static void main(String[] args) { new a_35_0swing_表格_TableColumnModel和监听器().init(); }}