JTable选择所有班次行

时间:2012-08-06 17:28:44

标签: java swing jtable

我添加了以下代码作为JTableHeader的监听器:

        header.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            JTableHeader header = (JTableHeader) e.getSource();
            JTable table = header.getTable();
            TableColumnModel columnModel = table.getColumnModel();
            int vci = columnModel.getColumnIndexAtX(e.getX());
            int mci = table.convertColumnIndexToModel(vci);
            if (mci == targetColumnIndex) {
                TableColumn column = columnModel.getColumn(vci);
                Object v = column.getHeaderValue();
                boolean b = Status.DESELECTED.equals(v) ? true : false;
                TableModel m = table.getModel();
                for (int i = 0; i < m.getRowCount(); i++) m.setValueAt(b, i, mci);
                column.setHeaderValue(b ? Status.SELECTED : Status.DESELECTED);
                //header.repaint();
            }
        }
    });

如果我手动选择一个或多个单元格,那么如果我单击ckeckAll标题,则执行此代码,然后行的可视顺序发生变化,选择跳转到底部/顶部。任何想法?

1 个答案:

答案 0 :(得分:2)

TableHeader中的JTable已经内置了一个内置侦听器,可根据该列中存储的特定Comparator类型的Object对值进行排序

您正在向该表添加第二个侦听器,而不是覆盖内置的侦听器。所以你看到了这两种行为的影响。

<强>更新

如果您不想要任何排序功能,可以禁用行排序器,或者只是实现自己的排序功能。您也可以实现自己的自定义TableColumn