NatTable:选中的彩色行,选中的单元格呢?

Posted

技术标签:

【中文标题】NatTable:选中的彩色行,选中的单元格呢?【英文标题】:NatTable: colored row selected, what about the selected cell? 【发布时间】:2021-12-19 11:08:12 【问题描述】:

我有一个 NatTable 和一些彩色行,通过标签“mylabel”。 “mylabel”由 ConfigLabelAccumulator 分配:

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 分配,“YELLOW”用于未选择的行,“DARK_YELLOW”用于选定的行:

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");

(旁注)条件(见&lt;my condition&gt;)发生变化后,我执行natTable.doCommand(new VisualRefreshCommand()); 以立即刷新表格。

它就像一个魅力,但有一件事:选定的单元格! 当&lt;my condition&gt;true 时,如何告诉所选单元格具有不同的颜色?

示例图片: 两张图片中两行都被选中(=>深黄色),只是选择锚点不同。

包含 529... 的单元格在被选中时应该具有不同的样式。

包含 /E0001 的单元格应该保持原样。

非常感谢,德克!!!

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

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);
    
);

【问题讨论】:

我不知道你的整个配置。您的画家是否包含LineBorderDecorator?那个通常负责绘制单元格边框 啊啊啊,你是对的!我从其中一个(很棒的!)示例中复制并粘贴,结果发现DefaultNatTableStyleConfiguration.cellPainternew PaddingDecorator(new TextPainter(), 2) 覆盖!现在我将其更改为new LineBorderDecorator(new PaddingDecorator(new TextPainter(), 2)) 我得到了红色边框!再次感谢您! 【参考方案1】:

IIUC 您正在谈论在选定行/列中具有焦点的单元格。这就是所谓的选择锚。并且选择锚点通过标签SelectionStyleLabels.SELECTION_ANCHOR_STYLE专门设置样式,以在多选场景中将具有焦点的选定单元格与其他选定单元格区分开来。

也就是说,您需要另外配置选择锚的样式。但由于无法为多标签配置样式,我知道的唯一方法是删除选择锚的背景样式,以便从一般选择样式继承背景颜色。如果您想突出选择锚点,请使用其他样式位,例如设置边框。

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);

【讨论】:

嗨,Dirk,感谢您进入主题! :) 是的,我在 DefaultSelectionStyleConfigurationSelectionLayer.getConfigLabelsByPosition(...) 的某处找到了 SELECTION_ANCHOR_STYLE 但这不会为所有行/单元格设置样式,而不仅仅是我想要的那些(&lt;my condition&gt; 是 @987654327 @)? 我已经更新了我的回复。无法根据附加标签更改选择锚点。这里使用的做法是去掉选择锚点的背景颜色配置,让它继承选择背景颜色。 非常感谢!!!我接受并赞成您的回答,并编辑了我的问题以包含我现在使用的解决方案。

以上是关于NatTable:选中的彩色行,选中的单元格呢?的主要内容,如果未能解决你的问题,请参考以下文章

UITableView&UICollectionView设置单元格的默认选中状态

如何为 NatTable 中的特定单元格跳过或不应用 cellpainter

jqgrid 不能选中行, 每次点击单元格都自动选中第一行

EXCEL如何高亮显示当前选中单元格所在行、列?

Excel怎么设置:选中某个单元格,他就自动选中这个单元格所在的一整行数据?

EXCEL如何从单元格选中到它所在的整行