【问题标题】:JXTable - how to update highlighters on sorting the tableJXTable - 如何在排序表格时更新荧光笔
【发布时间】:2012-10-30 01:38:25
【问题描述】:

我有一个带有自定义表模型的 JXTable。我添加了 2 个带有自定义 HighlightPredicate 的 ColorHighlighter。

问题是当我单击列标题时,表格对行进行排序,但荧光笔仍然与旧视图一样。

表格排序后如何更新高亮状态?

【问题讨论】:

  • 已将视图索引转换为模型model int modelRow = convertRowIndexToModel(row),可能有效,可能不取决于 SwingX 版本,
  • 还有一些其他问题,最好发布一个SSCCE,简短、可运行、可编译,也适合潜在的回答者和未来的读者
  • 谢谢,今天晚些时候我会添加一个简单的例子。
  • 显示你用来控制荧光笔的谓词

标签: java swing swingx jxtable tablerowsorter


【解决方案1】:

正如@kleopatra 提到的,我查看了我的谓词:

    HighlightPredicate spakowany = new HighlightPredicate() {
        @Override
        public boolean isHighlighted(Component renderer, ComponentAdapter adapter) {
            TableModel tableModel = table.getModel();
            if (tableModel instanceof StanTableModel) {
                StanTableModel stanTableModel = (StanTableModel) tableModel;
                // int rowIndex = adapter.row;  <-  this was the issue 
                int rowIndex = adapter.convertRowIndexToModel(adapter.row);
                StanTableRow myCustomRow = stanTableModel.getRow(rowIndex);
                if ((myCustomRow.isSpakowany()) {
                    return true;
                }
            }
            return false;
        }
    };

并使用了@mKorbel 的想法:

曾经:

    int rowIndex = adapter.row;

现在:

    int rowIndex = adapter.convertRowIndexToModel(adapter.row);

现在可以了。

StanTableModel 是我的自定义表格模型。它具有 getRow() 函数并返回一个 StanTableRow 对象,该对象又具有 isSpakowany() 函数。

【讨论】:

  • 很高兴您发现了问题 :-) 考虑使用正确工作的行(即具有转换后的 rowIndex 的行)更改代码 sn-p,否则会有点混乱。
  • @kleopatra 还有另一种方式,意思是HighlightPredicategetTableModel,不可能是脆弱的???
猜你喜欢
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
相关资源
最近更新 更多