Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向Eclipse表中添加删除图标列_Java_Eclipse_Sdk_Swt_Eclipse Plugin - Fatal编程技术网

Java 向Eclipse表中添加删除图标列

Java 向Eclipse表中添加删除图标列,java,eclipse,sdk,swt,eclipse-plugin,Java,Eclipse,Sdk,Swt,Eclipse Plugin,目前,我已经在Eclipse插件中实现了一个,它支持单元格级别的编辑和键盘支持(使用编辑器遍历单元格) 我还需要一种删除行的方法,我不想在表旁边添加删除按钮,因为删除一行需要单击两次(1次选择一行,1次删除)。相反,我想要一个单独的列,其中填充了删除图标。我想到了两种方法来实现这一点,但在这两方面都遇到了问题: 将另一列添加到表中,将图标设置为。此方法存在多个问题,您可以在下面看到这些问题: 选择行时,图标也会被选中 当鼠标悬停在图标上时,它会得到一个显然无法禁用的图像工具提示 似乎无法将图像

目前,我已经在Eclipse插件中实现了一个,它支持单元格级别的编辑和键盘支持(使用编辑器遍历单元格)

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

  • 将另一列添加到
    表中
    ,将图标设置为。
    此方法存在多个问题,您可以在下面看到这些问题:

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

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

    • 似乎无法隐藏滚动条

  • 因此,我的问题是:

    • 我如何解决这两种方法中提到的问题
    • 还有其他更好的方法吗

    我找到了一种隐藏滚动条的方法,用于第二次接近。基本上,您需要做的就是:

    // ScrolledComposite sc;
    sc.setAlwaysShowScrollBars(true);
    sc.getVerticalBar().setVisible(false);
    
    然后将
    ScrolledComposite
    的宽度设置为
    1
    ,以消除不可见的
    滚动条所占用的额外空间

    要保持滚动条同步,请执行以下操作:

    // 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