- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 RCP 应用程序,并为此使用 Nebula 的 NatTable。当谈到选择时,我不明白我应该如何使用它。
我想要的是:
RowOnlySelectionConfiguration
和 RowOnlySelectionBindings
来做到这一点。我已经看到文档讨论了可用于此目的的 PreserveSelectionModel
:
If you used the
PreserveSelectionStructuralChangeEventHandler
workaround in previous versions for not clearing the selection on structural changes, you will notice that this workaround will not work anymore. If you still need that behavior, you are now able to achieve the same by configuring and setting aSelectionModel
instance like this:SelectionModel model = new SelectionModel(selectionLayer);
// configure to not clear the selection on structural changes
model.setClearSelectionOnChange(false);
selectionLayer.setSelectionModel(model);If you expect that the selection should update and move with structural changes (e.g. sorting), try to use the
PreserveSelectionModel
.
https://www.eclipse.org/nattable/nandn/nandn_120.php
所以我想我必须使用PreserveSelectionModel
?但我无法调用 setClearSelectionOnChange(false)
。默认情况下会这样做吗?
如何使用 PreserveSelectionModel
?我在构造函数中传递什么?
我在一个名为 TableBodyLayerStack
的类中实现了自己的 BodyLayerStack,我在构造函数中尝试了以下操作:
public TableBodyLayerStack(IUniqueIndexLayer underlyingLayer) {
super(underlyingLayer);
columnReorderLayer = new ColumnReorderLayer(underlyingLayer);
columnHideShowLayer = new ColumnHideShowLayer(columnReorderLayer);
selectionLayer = new SelectionLayer(columnHideShowLayer, null, true, false);
PreserveSelectionModel<?> selectionModel = new PreserveSelectionModel<>(
selectionLayer, null, null);
selectionLayer.setSelectionModel(selectionModel);
selectionLayer.registerEventHandler(new SelectEventHandler(selectionLayer));
viewportLayer = new ViewportLayer(selectionLayer);
setUnderlyingLayer(viewportLayer);
registerCommandHandler(new CopyDataCommandHandler(selectionLayer));
}
然后,在 GridLayer
实现的构造函数中,我执行以下操作:
// ...
bodyLayer = new TableBodyLayerStack(eventLayer);
// register different selection move command handler that always moves by row
bodyLayer.getSelectionLayer().addConfiguration(new RowOnlySelectionConfiguration<T>());
// register selection bindings that will perform row selections instead of cell selections
// registering the bindings on a layer that is above the SelectionLayer will consume the
// commands before they are handled by the SelectionLayer
bodyLayer.addConfiguration(new RowOnlySelectionBindings());
// ...
但这在 PreserveSelectionModel
中给了我 NullPointerExceptions。
Error while painting table: null
java.lang.NullPointerException
at org.eclipse.nebula.widgets.nattable.selection.preserve.PreserveSelectionModel.getRowPositionByRowObject(PreserveSelectionModel.java:520)
at org.eclipse.nebula.widgets.nattable.selection.preserve.PreserveSelectionModel.createMarkerPoint(PreserveSelectionModel.java:559)
at org.eclipse.nebula.widgets.nattable.selection.preserve.PreserveSelectionModel.getSelectionAnchor(PreserveSelectionModel.java:531)
at org.eclipse.nebula.widgets.nattable.selection.SelectionLayer.getSelectionAnchor(SelectionLayer.java:276)
at org.eclipse.nebula.widgets.nattable.selection.SelectionLayer.getConfigLabelsByPosition(SelectionLayer.java:415)
at org.eclipse.nebula.widgets.nattable.layer.AbstractLayerTransform.getConfigLabelsByPosition(AbstractLayerTransform.java:316)
at org.eclipse.nebula.widgets.nattable.layer.AbstractIndexLayerTransform.getConfigLabelsByPosition(AbstractIndexLayerTransform.java:318)
at org.eclipse.nebula.widgets.nattable.layer.CompositeLayer.getConfigLabelsByPosition(CompositeLayer.java:553)
at org.eclipse.nebula.widgets.nattable.layer.cell.AbstractLayerCell.getConfigLabels(AbstractLayerCell.java:48)
at org.eclipse.nebula.widgets.nattable.layer.AbstractLayer.getCellPainter(AbstractLayer.java:354)
at org.eclipse.nebula.widgets.nattable.layer.AbstractLayerTransform.getCellPainter(AbstractLayerTransform.java:336)
at org.eclipse.nebula.widgets.nattable.layer.AbstractLayerTransform.getCellPainter(AbstractLayerTransform.java:336)
at org.eclipse.nebula.widgets.nattable.layer.AbstractLayerTransform.getCellPainter(AbstractLayerTransform.java:336)
at org.eclipse.nebula.widgets.nattable.layer.AbstractIndexLayerTransform.getCellPainter(AbstractIndexLayerTransform.java:340)
at org.eclipse.nebula.widgets.nattable.layer.AbstractLayerTransform.getCellPainter(AbstractLayerTransform.java:336)
at org.eclipse.nebula.widgets.nattable.layer.AbstractIndexLayerTransform.getCellPainter(AbstractIndexLayerTransform.java:340)
at org.eclipse.nebula.widgets.nattable.layer.CompositeLayer.getCellPainter(CompositeLayer.java:586)
at org.eclipse.nebula.widgets.nattable.painter.layer.CellLayerPainter.paintCell(CellLayerPainter.java:171)
at org.eclipse.nebula.widgets.nattable.painter.layer.CellLayerPainter.paintLayer(CellLayerPainter.java:81)
at org.eclipse.nebula.widgets.nattable.painter.layer.GridLineCellLayerPainter.paintLayer(GridLineCellLayerPainter.java:106)
at org.eclipse.nebula.widgets.nattable.selection.SelectionLayerPainter.paintLayer(SelectionLayerPainter.java:95)
at org.eclipse.nebula.widgets.nattable.layer.CompositeLayer$CompositeLayerPainter.paintLayer(CompositeLayer.java:913)
at org.eclipse.nebula.widgets.nattable.painter.layer.NatLayerPainter.paintLayer(NatLayerPainter.java:43)
at org.eclipse.nebula.widgets.nattable.NatTable.paintNatTable(NatTable.java:408)
at org.eclipse.nebula.widgets.nattable.NatTable.paintControl(NatTable.java:403)
...
我猜这是因为我在 PreserveSelectionModel
的构造函数中传递了 null 值。但我该如何使用它呢?我必须将什么作为构造函数的参数传递?我从哪里获取这些值?
感谢任何帮助。
最佳答案
您在实现目标方面走错了路。首先我回答一下大家的问题:
So I guess I have to use the PreserveSelectionModel?
PreserveSelectionModel
旨在保留单元格选择的选择。您想要保留整行的选择。所以你需要使用
RowSelectionModel
.
But there I can't call setClearSelectionOnChange(false). Does it do that by default?
But this is giving me NullPointerExceptions in the PreserveSelectionModel. I guess it is because I pass null values in the constructor of my PreserveSelectionModel.
What do I have to pass as arguments for the constructor? Where do I get the values from?
IRowDataProvider<T>
,所以它是
IDataProvider
为了 body 。 第三个参数是
IRowIdAccessor<T>
。您需要创建一个提供唯一 ID 的实现,以便在不知道基础集合中的位置或索引的情况下识别行。
所以你需要做的是这样的:
selectionLayer.setSelectionModel(new RowSelectionModel<Person>(
selectionLayer, bodyDataProvider, new IRowIdAccessor<Person>() {
@Override
public Serializable getRowId(Person rowObject) {
return rowObject.getId();
}
}));
但是您当然需要提供IDataProvider
还有IRowIdAccessor
给您TableBodyLayerStack
如果你想保持通用。
另请注意,您不必自己调用 SelectionLayer#registerEventHandler()!这是通过调用 SelectionLayer#setSelectionModel() 在内部完成的。
您可以在 NatTable 示例应用程序中找到多个示例,网址为 https://www.eclipse.org/nattable/ (右侧的“尝试一下!”按钮)。对于您的问题,教程示例 -> 图层 -> 选择 -> RowSelectionExample 似乎是值得一看的。
关于java - 如何使用Nebula NatTable的PreserveSelectionModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29212455/
我正在编写和测试Gradle插件。当我尝试测试插件时,出现错误消息,指示找不到插件类?如果使用插件ID,则会得到:找不到ID为<>的插件。如果使用插件类名称,则会得到:在根项目上找不到属性“com”。
我在 eclipse ViewPart 中使用 Nattable。我的 RCP 应用程序是这样的,每次打开 View 时,表可以根据我希望显示的数据模型(由不同的 POJO 表示)具有不同的列。简而言
我在我的应用程序中使用星云gridTableViewer,在它的单元格中有时内容太长,所以我想显示为WRAP(多行)。我对其进行了更改,但它没有反射(reflect)出来: 我添加了 SWT.WRAP
我正在研究星云网格表。我返回到 getToolTipText() 方法的字符串不适合多行,同时它显示在单行中。我使用以下代码来实现多行工具提示。但我仍然在一行中得到该字符串。 ColumnViewer
我正在尝试将 CDateTime 作为我的 swt 表格控件的单元格编辑器。当我运行独立的 CDateTime 示例(来自 here )时,它是这样的: CDateTime 是这样创建的: final
我正在尝试设置 NatTable 树的样式,以便未装饰项目的缩进与装饰项目的缩进相匹配。因此,没有子项的项目和有子项的项目基本上具有相同的缩进。 我使用以下配置的示例: public class Pe
我想使用Nebula CDateTime组件,但我有问题,所选日期没有在面板中标记(所选的是17): 我需要更改什么才能突出显示所选日期? 最佳答案 有一个关于此的错误报告: Highlighting
我目前正在使用 Nebula GridTable,并希望为表的行和列实现复制和粘贴功能。行的选择是开箱即用的,但如果我按下标题单元格,我希望选择一列。GridTableViewer创建如下 new G
我正在使用带有 gradle 的 bebula.ospackage 插件来创建特定的 rpm。 所以添加了以下内容 ospackage { packageName = "rpmA" p
我正在尝试从 Eclipse 安装 Nebula-Software。看来,我错过了一个可能很小但非常相关的点。 我的主要目标是测试和使用“星云示波器小部件”。 所以我按照我被告知的去做: https:
我正在尝试通过Eclilpse Nebula使用嵌入式CKEditor在 SWT 控件中。它通过 Eclipse RCP 中的内置浏览器引擎使用 CKEditor。该控件尝试使用 CKEdior 的
我正在使用 nebula.os-package 插件为 gradle 构建 native 代码包。我需要指定正确架构的 glibc 是必需的。我尝试了明显的 requires 'glibc%{?_is
我只是想创建一个网格插件,可以让用户编辑每个单元格。我找到了 Eclipse Nebula,它似乎与我想要做的非常接近,只是我无法找到使单元格可编辑的方法。到目前为止,我有这样简单的事情: publi
我是 opennebula 的新手,我正在尝试在单个服务器中配置“前端和工作节点”。我试图按照此处的文档来配置 Open Nebula: http://docs.opennebula.org/4.12
我们有一个从命令行运行的工具。命令之一是-version。 在我们转换为 nebula 发布插件之前,版本位于 gradle.properties 文件中,作为构建的一部分,我们将其从那里复制到 sr
我是一名优秀的程序员,十分优秀!