“修复”SWT表中的前几列以防止它们水平滚动

时间:2009-03-02 16:22:24

标签: java swt

我们已经实现了一个带有SWT树表的基于表的编辑器。它几乎完成了我们想要的东西,除了我们找不到一种方法来确保当用户水平滚动时前几列保持在它们的位置(这样可以识别正在编辑的行)。

有许多第三方表格控件在不同程度上不完整或被遗弃,以及一个片段,显示如何使用两个表格(在垂直滚动时不同步)。

解决这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

这个'官方'SWT snippet做你想做的事情,至少在我的机器上做 - 它在垂直滚动上不会失去同步。但价格是第二个滚动条 - 丑陋的方式。为防止这种情况,您可以在左表的构造函数中添加样式SWT.NO_SCROLL

为了改进这一点,您必须在SWT.Traverse上向两个表添加一个监听器,如果用户使用键导航,则会同步它们,如下所示:

  leftTable.addListener(SWT.Traverse, new Listener() {

     public void handleEvent( Event event ) {
        rightTable.setTopIndex(leftTable.getTopIndex());
     }
  });

我不会使用另一个Table实现,因为你失去了SWT的最大优势:使用本机小部件,在每个操作系统中看起来和感觉都是“正确的”。无论如何你想要这样做,来自星云项目的Grid比alpha标签暗示的要成熟得多。不过,不知道它是否可以做你想做的事。

答案 1 :(得分:0)

“同步问题”仅出现在基于MacO的SWT上。如果您的目标平台是Windows,那么您应该对给定的SWT-Snippet没有任何问题。将有更多的监听器在两个表上注册以同步所有发生的事件(折叠,展开,鼠标滚动等)。