我使用 JXTable 和 JXTableHeader 来显示可排序的表。JXTableHeader 支持一种重置排序顺序的方法,方法是按住 shift 并同时左键单击标题。问题如下: 这种重置模式是不可能的 atm,因为 Java Swing 的 BasicTableHeaderUI 将鼠标侦听器添加到 JXTableHeader,即使我将自己的侦听器添加到 JXTableHeader,BasicTableHeaderUI 也会被触发,尽管我在侦听器的 mouseClick 方法中重置了排序顺序,但BasicTableHeaderUI 立即将同一列设置为在其自己的 mouseClick 方法中排序。问题 #2,我不能在事件上使用消耗,因为 BasicTableHeaderUI 的侦听器只是忽略了标志。
如何防止以干净的方式触发 BasicTableHeaderUI 的侦听器?
解决方案:
这是我采用的解决方案。我为 BasicTableHeaderUI 的 MouseListener 实现了一个包装器,并将其更改为我在 updateUI 上的包装器。我的包装器只是在特定条件下(-> resetSortOrder)忽略了包装的 MouseListener 的 mouseClick 调用。