NatTable: colored row selected,选中的单元格呢?
NatTable: colored row selected, what about the selected cell?
我有一个 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");
(旁注)在条件(参见 <my condition>
)更改后,我执行 natTable.doCommand(new VisualRefreshCommand());
以立即刷新 table。
它就像一个魅力,但有一点:选定的单元格!
当 <my condition>
为 true
时,如何让所选单元格具有不同的颜色?
示例图片:
两张图片都选择了两行(=>深黄色),只是选择锚点不同。
包含 529... 的单元格在选中时应具有不同的样式。
包含 /E0001 的单元格应保持原样。
非常感谢,德克!!!
我最终得到了这个解决方案,调整了 SelectionLayer
的 DefaultSelectionLayerConfiguration
和 DefaultSelectionStyleConfiguration
:
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);
}
});
IIUC 你说的是在选定 row/column 中具有焦点的单元格。这就是所谓的选择锚。并且选择锚点通过标签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);
我有一个 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");
(旁注)在条件(参见 <my condition>
)更改后,我执行 natTable.doCommand(new VisualRefreshCommand());
以立即刷新 table。
它就像一个魅力,但有一点:选定的单元格!
当 <my condition>
为 true
时,如何让所选单元格具有不同的颜色?
示例图片:
两张图片都选择了两行(=>深黄色),只是选择锚点不同。
包含 529... 的单元格在选中时应具有不同的样式。
包含 /E0001 的单元格应保持原样。
非常感谢,德克!!!
我最终得到了这个解决方案,调整了 SelectionLayer
的 DefaultSelectionLayerConfiguration
和 DefaultSelectionStyleConfiguration
:
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);
}
});
IIUC 你说的是在选定 row/column 中具有焦点的单元格。这就是所谓的选择锚。并且选择锚点通过标签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);