【问题标题】:Error in changing background color of row in JFace tableviewer在 JFace 表格查看器中更改行的背景颜色时出错
【发布时间】:2014-05-20 21:30:55
【问题描述】:

我想根据某些条件更改 tableviewer 的行颜色。我使用了以下代码sn-p。

tableViewer.setLabelProvider(new ColumnLabelProvider(){
        @Override
        public Color getForeground(Object element){
             super.clearListeners();
             if((((MyClass)element).getMyMethodValue()).equals("ABC"))
               return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
             else
               return null;
        }
    });

行的颜色正在改变,但每个单元格的文本已更改为模型类“MYClass”的对象名称,如 com.sample.JfaceProject.model.MyClass@394083 。我很困惑为什么表格的每个单元格中的文本都发生了变化。我做对了吗?谁能给我一些建议。

提前致谢

【问题讨论】:

    标签: java jface e4 tableviewer


    【解决方案1】:

    如果您使用 ColumnLabelProvider,则必须将它用于与列有关的所有内容 - 因此您需要覆盖 getText 以及 getForeground

    ColumnLabelProvider 的默认 getText

    public String getText(Object element) {
      return element == null ? "" : element.toString();//$NON-NLS-1$
    }
    

    产生“com.sample.JfaceProject.model.MyClass@394083”输出的是element.toString() - 这是默认的Object.toString() 输出。

    【讨论】:

    • 在我的 tableviewer 中,一列是字符串类型,其他是选中/未选中的图像。我是否必须为所有列覆盖 getText() 和 getImage() 方法?有没有其他办法?
    • 一旦您开始使用 ColumnLabelProvider,您必须将它用于所有列。
    • 实现ITableColorProvider和ITableLabelProvider设置行颜色是否正确?
    • 是的,您可以将它们与 ITableLabelProvider 一起使用。有几种不同的做事方式!
    • 现在一切正常。该行的颜色是灰色的。但我无法编辑复选框。行颜色更改后是否必须再次调用 EditingSupport?
    猜你喜欢
    • 2018-10-14
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2022-06-16
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多