当前位置: 首页 > 知识库问答 >
问题:

动态更改NatTable中的行颜色

易招
2023-03-14

我正在尝试根据行标准更改背景行颜色。我离得很近,但有些事情我不能完全理解。(我相信这是因为我从底层列表中提取对象,而不是动态地获取数据。我标记了下面代码的这一部分)

在下面的示例中,每一行颜色都基于一个具有成功或失败值的对象(MyObj)。如果myObj有一个成功值,行应该是绿色的。如果myObj有一个失败值,那么行应该是红色的。如果myObj没有值,则应使用默认行颜色。

Example:
 Row 1 - "SUCCESS" - Shows Green
 Row 2 - "FAIL" - Shows Red
 Row 1 - "FAIL - Shows Green
 Row 2 - "SUCCESS" - Shows Red
void example() {
    getNatTable().addConfiguration(new AbstractRegistryConfiguration() {
        @Override
        public void configureRegistry(IConfigRegistry configRegistry) {
            Style cellStyleSuccess = new Style();
            cellStyleSuccess.setAttributeValue(
                                CellStyleAttributes.BACKGROUND_COLOR,
                                COLOR_SUCCESS);
            configRegistry.registerConfigAttribute(
                                CellConfigAttributes.CELL_STYLE, 
                                cellStyleSuccess,
                                DisplayMode.NORMAL, "SUCCESS");

            Style cellStyleFail = new Style();
            cellStyleFail.setAttributeValue(
                                CellStyleAttributes.BACKGROUND_COLOR, 
                                COLOR_FAILURE);
            configRegistry.registerConfigAttribute(
                                CellConfigAttributes.CELL_STYLE, 
                                cellStyleFail,
                                DisplayMode.NORMAL, "FAIL");
        }
    });
    DataLayer dl = getGlazedListsGridLayer().getBodyDataLayer();
    IConfigLabelAccumulator cellLabelAccumulator = 
      new IConfigLabelAccumulator() {
        @Override
        public void accumulateConfigLabels(LabelStack configLabels, 
                        int columnPosition, int rowPosition) {
            configLabels.getLabels().clear();
            // TODO Is this the issue? Is there a better way to 
            // pull MyObj here?
            MyObj myObj = getEventList().get(rowPosition);
            if (myObj.getFoo().equals("SUCCESS")) {
                configLabels.addLabel("SUCCESS");
            } else if (myObj.getFoo().equals("FAIL"))) {
                configLabels.addLabel("FAIL");
            } else {
                // default color
            }

        }
    };

    dl.setConfigLabelAccumulator(cellLabelAccumulator);
    getNatTable().configure();
}

共有1个答案

锺离宸
2023-03-14

可能导致问题的重要部分被遗漏了。getEventList()返回哪个列表?如果是基本的EventList,则总是在原始索引处获取对象。排序时,通过sortedlist应用转换。因此,如果getEventList()返回top most GlazedLists集合(SortedListFilterList,这取决于您使用的特性),问题就可以解决了。

 类似资料:
  • 你有没有动态改变单元格颜色的建议,我在下面尝试过,但当表没有那些标签(“失败”)时,即使在行之后也会保持彩色。当表中不存在故障标签时,我想恢复有色单元格的颜色。

  • 我正在使用RangeSeekBar为3种情况设置一些值(即绿色=OK,琥珀色=警告,红色=撤离)...我正在使用xml绘图来设置背景 我知道我可以通过编程更改渐变,但如何缩小起始颜色并增加结束颜色?有人能解决这个问题吗? 谢谢

  • 问题内容: 我在中创建两个对象,然后执行以下操作。 运行代码时,我可以看到两个矩形(一个在Aqua中,一个在黑色中),当我单击按钮时,我必须等待2秒钟才能查看两个矩形的颜色变化。 我先更改一个矩形的颜色,然后再更改下一个矩形的颜色。 我的问题是为什么我应该等待2秒?有没有一种方法可以动态更新矩形的颜色? 问题答案: 您正在UI线程上睡眠,该线程会阻止任何进一步的处理(包括刷新屏幕)。 如果需要延迟

  • 在我的项目中,我想实现一个语法突出显示功能。我的意思是,当用户在代码区键入代码时,文本将像IDE(Eclipse、Intellij、Netbeans)一样立即高亮显示。 例如,如果我们在IntellijJavaIDE中键入“import”,那么它会将单词“import”涂成蓝色。在我的项目中,我想实现同样的事情。 我的目标是用蓝色突出特定的关键词。例如,如果关键字是“mov”、“load”、“xo

  • 如何根据android edittext的背景颜色(动态)更改android edittext光标颜色?。如果我选择深色背景颜色编辑文本,光标将是浅色。如果我选择深色背景颜色编辑文本,光标将是暗色。基于edittext颜色更改,光标颜色将在运行时更改。如何实现?任何想法都欢迎。

  • 我试图显示一个图像的直方图,只显示一些颜色。我已经用JFreeChart和createXYLineChart实现了这一点,并通过遍历所有像素来获取所有数据。 为了加快速度,我尝试用“createhistogram”来完成它。我遵循了这个准则。 为了用新值更新图表,我使用了以下两种方法: setHistogram是一种方法,它根据激活的复选框(布尔红色、绿色和蓝色)返回HistogramDatase