首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NatTable:选中的彩色行,所选的单元格怎么办?

NatTable:选中的彩色行,所选的单元格怎么办?
EN

Stack Overflow用户
提问于 2021-11-05 11:22:52
回答 1查看 77关注 0票数 1

我有一个NatTable和一些彩色行,通过标签“我的标签”。

"mylabel“由ConfigLabelAccumulator分配:

代码语言:javascript
复制
final AggregateConfigLabelAccumulator labelAccumulator = new AggregateConfigLabelAccumulator();
labelAccumulator.add(new ColumnLabelAccumulator());
labelAccumulator.add(new IConfigLabelAccumulator() {
    @Override
    public void accumulateConfigLabels(final LabelStack configLabels, final int columnPosition, final int rowPosition) {
        if (<my condition>) configLabels.addLabelOnTop("mylabel");
    }
});

"mylabel“的样式是通过ConfigRegistry指定的,未选定行为”黄色“,选定行为"DARK_YELLOW”:

代码语言:javascript
复制
final ConfigRegistry configRegistry = new ConfigRegistry();
final Style style = new Style();
style.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR, GUIHelper.COLOR_YELLOW);
configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_STYLE, style, DisplayMode.NORMAL, "mylabel");

final Style styleSelected = new Style();
styleSelected.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR, Display.getDefault().getSystemColor(SWT.COLOR_DARK_YELLOW));
configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_STYLE, styleSelected, DisplayMode.SELECT, "mylabel");

(sidenote)在条件(参见<my condition>)更改后,我执行natTable.doCommand(new VisualRefreshCommand());来立即刷新表。

它工作起来像一个魅力,但有一点:选定的细胞!

<my condition>true时,如何告诉选定的单元格具有不同的颜色

图片示例:

两行在两幅图片(=>暗黄色)中都被选中,只有选择锚是不同的。

牢房里有529..。选择时应该有不同的样式。

包含/E0001的细胞应该保持原样。

非常感谢你,德克!

我最终得到了这个解决方案,对SelectionLayerDefaultSelectionLayerConfigurationDefaultSelectionStyleConfiguration进行了调整。

代码语言:javascript
复制
this.selectionLayer = new SelectionLayer(glazedListsEventLayer, false);
this.selectionLayer.addConfiguration(new DefaultSelectionLayerConfiguration() {
    @Override
    protected void addSelectionStyleConfig() {
        final DefaultSelectionStyleConfiguration dssc = new DefaultSelectionStyleConfiguration();
        dssc.anchorBgColor = null;
        dssc.anchorFgColor = null;
        dssc.anchorBorderStyle = new BorderStyle(1, GUIHelper.COLOR_RED, LineStyleEnum.SOLID);
        addConfiguration(dssc);
    }
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-05 11:47:37

您指的是在选定的行/列中具有焦点的单元格。这被称为选择锚。选择锚被特别地通过标签SelectionStyleLabels.SELECTION_ANCHOR_STYLE进行样式,以区分在多个选择场景中具有焦点的所选单元格和其他选定单元。

尽管如此,您还需要为选择锚配置样式。但是,由于不可能为多个标签配置样式,我知道的唯一方法是删除选择锚的背景样式,以便从一般选择样式继承背景颜色。如果您想突出显示选择锚点,请使用其他样式位,例如设置边框。

代码语言:javascript
复制
IStyle anchorStyle = new Style();
anchorStyle.setAttributeValue(
        CellStyleAttributes.BORDER_STYLE,
        new BorderStyle(1, GUIHelper.COLOR_RED, LineStyleEnum.SOLID));
configRegistry.registerConfigAttribute(
        CellConfigAttributes.CELL_STYLE,
        anchorStyle,
        DisplayMode.SELECT,
        SelectionStyleLabels.SELECTION_ANCHOR_STYLE);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69852487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档