【问题标题】:JTable TableColumn - no property change for modelIndex when dragging columnsJTable TableColumn - 拖动列时modelIndex的属性没有变化
【发布时间】:2021-06-25 19:28:31
【问题描述】:

我需要检测用户何时对JTable 的列重新排序,以便保留和恢复该信息。根据JavaDocs,将propertyChangeListener 添加到表列中就足够了,例如

    JTable t = ...;
    TableColumn keysColumn   = t.getColumnModel().getColumn(0);
    TableColumn valuesColumn = t.getColumnModel().getColumn(1);
    keysColumn.addPropertyChangeListener(new PropertyChangeListener {
      public void propertyChange(PropertyChangeEvent e) {
        System.out.println("PROPERTY: " + e.getPropertyName());
      }
    });

但是,虽然我收到了 widthpreferredWidth 的更新,但重新排序列并不会触发任何可观察到的内容。我期待看到modelIndex 的更新。做错了什么?

Linux 上的 OpenJDK 11,尝试了不同的外观。

【问题讨论】:

    标签: java swing jtable tablecolumn


    【解决方案1】:

    所以TableColumnmodelIndex 永远不会改变,因此属性也不会改变。要观察运动,必须为columnMoved 收听TableColumnModel 并过滤e.getFromIndex != e.getToIndex,它们是视图索引,然后将它们映射回模型索引。 “如此简单”:-/

    在 Scala 中

    val tcm = t.getColumnModel
    
    tcm.addColumnModelListener(new TableColumnModelListener {
      private def mkMap() = Seq.tabulate(t.getColumnCount)(t.convertColumnIndexToModel)
    
      private var viewToModel = mkMap()
    
      override def columnMoved(e: TableColumnModelEvent): Unit = {
        val viewFrom  = e.getFromIndex
        val viewTo    = e.getToIndex
        if (viewFrom != viewTo) {
          val modelFrom = viewToModel(viewFrom)
          val modelTo   = viewToModel(viewTo  )
          println(s"columnMoved: drag column $modelFrom from pos $viewFrom to $viewTo")
          viewToModel = mkMap()
          assert (viewToModel(viewTo) == modelFrom)
        }
      }
    
      override def columnAdded            (e: TableColumnModelEvent ): Unit = ()
      override def columnRemoved          (e: TableColumnModelEvent ): Unit = ()
      override def columnMarginChanged    (e: ChangeEvent           ): Unit = ()
      override def columnSelectionChanged (e: ListSelectionEvent    ): Unit = ()
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-23
      • 2015-01-09
      • 2012-09-15
      • 1970-01-01
      • 2011-10-25
      • 2011-01-07
      • 2013-07-12
      • 2013-06-16
      相关资源
      最近更新 更多