【问题标题】:Adding a delete icon column to an Eclipse table将删除图标列添加到 Eclipse 表
【发布时间】:2012-02-03 05:13:15
【问题描述】:

我目前在我的 Eclipse 插件中实现了 TableTableEditor,以支持带有键盘支持的单元格级别编辑(使用编辑器遍历单元格)。

我还需要一种删除行的方法,我不想在表格旁边添加删除按钮的做法,因为它需要单击 2 次才能删除行(1 次选择行,1删除它)。相反,我想要一个单独的列,其中填充有删除图标。我想了两种方法来实现这一点,但都遇到了问题:

  1. Table 中添加另一列,将图标设置为TableItem.setImage()这种方法存在多个问题,您可以在下面看到它们:

    • 选择行时,图标也会被选中
    • 将鼠标悬停在图标上时,它会获得一个显然无法禁用的图像工具提示
    • 似乎无法将单元格内的图像垂直居中

  2. 在表格旁边添加一个ScrolledComposite 并用删除图标填充它。这听起来有点疯狂,但我实际上已经完成了这个。这个想法是用删除图标填充ScrolledComposite,强制它随着表格的滚动条滚动,并在单击图标时删除相应的行。这种方法我只遇到了一个阻塞问题:

    • 似乎无法隐藏滚动条

所以我的问题是:

  • 如何解决上述任何一种方法的问题?
  • 还有其他更好的方法吗?

【问题讨论】:

    标签: java eclipse sdk swt eclipse-plugin


    【解决方案1】:

    我找到了一种方法来隐藏我的第二种方法的滚动条。基本上你需要做的就是:

    // ScrolledComposite sc;
    sc.setAlwaysShowScrollBars(true);
    sc.getVerticalBar().setVisible(false);
    

    然后将ScrolledComposite的宽度设置为1,以消除不可见的ScrollBar占用的额外空间。

    并保持滚动条同步:

    // Table table;
    // ScrolledComposite sc;
    // int tableRowHeight;
    
    protected void createTable() {
    
      ...
    
      // Set the listener that dictates the table row height.
      table.addListener(SWT.MeasureItem, new Listener() {
        @Override
        public void handleEvent(Event event) {
          event.height = tableRowHeight;
        }
      });
    
      // Set the listener for keeping the scrollbars in sync.
      table.getVerticalBar().addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
          syncDeleteColumnScrollBar();
        }
      });
    }
    
    // This is extracted out into a method so it can also be called
    // when removing a table row.
    protected void syncDeleteColumnScrollBar() {
      sc.setOrigin(0, table.getVerticalBar().getSelection() * tableRowHeight);
    }
    

    结果:

    【讨论】:

    • 聪明。出于好奇,当表格滚动时,您用于滚动ScrolledComposite 的代码是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    相关资源
    最近更新 更多