【问题标题】:JTable select all shifts rowsJTable 选择所有班次行
【发布时间】:2012-08-06 17:28:44
【问题描述】:

我添加了以下代码作为 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 标题,此代码将执行,然后行的视觉顺序发生变化,选择跳转到底部/顶部。有什么想法吗?

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

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

    您正在向该表添加第二个侦听器,而不是覆盖内置的侦听器。所以你看到了这两个动作的效果。

    更新

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

    【讨论】:

    • 我可以以某种方式禁用初始,以某种方式排序吗?或者如果没有,还有其他停止排序的方法吗?
    • 我已经更新了我的答案,我自己从来没有这样做过,但我绝对肯定它是可能的。
    猜你喜欢
    • 2013-08-06
    • 2018-10-30
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多