SWT - Table 查看器中心复选框
SWT - Table Viewer center checkbox
我的 Table 查看器的最后一列仅包含一个复选框。复选框出现在单元格的左侧,因为列名很长,所以看起来很难看。如何将复选框居中放置在单元格中间?不使用图像可能吗?这是我创建列的方式:
// third column - check box. temporary
TableColumn column = new TableColumn(viewer.getTable(), SWT.NONE);
column.setText("PrettyLongColumnName");
column.setWidth(100);
TableViewerColumn checkColumn = new TableViewerColumn(viewer, column);
checkColumn.setLabelProvider(new ColumnLabelProvider() {
// the checkboxes should be disposed and rebuilt when input changes
@Override
public void update(ViewerCell cell) {
MyObject system = (MyObject) cell.getElement();
TableItem item = (TableItem) cell.getItem();
Button button;
if (buttonsMap.containsKey(cell.getElement())) {
button = rightTableButtons.get(cell.getElement());
} else {
button = new Button((Composite) cell.getViewerRow().getControl(), SWT.CHECK);
button.setEnabled(true);
buttonsMap.put(cell.getElement(), button);
TableEditor editor = new TableEditor(item.getParent());
editor.grabHorizontal = true;
editor.grabVertical = true;
editor.setEditor(button, item, cell.getColumnIndex());
editor.layout();
}
}
}
});
TL;DR: 不可用 nativley,但可以通过 epic hackery 实现。
复选框实际上是一个 OS 功能。由于 SWT 是 cross-platform,我们依赖它由 OS.
提供
AFIK 所有 OS (Gtk/Win32/Cocoa) 唯一提供的是第一列上的单个复选框。
其他
花哨的功能必须手动实现。
我见过人们这样做的一种方法是绘制自定义图标,然后在您使用事件侦听器单击它时更新图标。
关于如何在右侧绘制图标的示例在this snippet中。单击 checked/unchecked.
时,您必须添加单击侦听器才能更改图标
请注意,这可能会导致您的应用程序在不同平台和主题(例如深色主题)之间看起来不一致。
为了解决这个问题,我们有一些人实际上生成了一个本机复选框,然后以编程方式拍摄屏幕截图,然后将其绘制在列的右侧。我认为这是最好的黑客技术。
如果您有任何问题,请告诉我。
我的 Table 查看器的最后一列仅包含一个复选框。复选框出现在单元格的左侧,因为列名很长,所以看起来很难看。如何将复选框居中放置在单元格中间?不使用图像可能吗?这是我创建列的方式:
// third column - check box. temporary
TableColumn column = new TableColumn(viewer.getTable(), SWT.NONE);
column.setText("PrettyLongColumnName");
column.setWidth(100);
TableViewerColumn checkColumn = new TableViewerColumn(viewer, column);
checkColumn.setLabelProvider(new ColumnLabelProvider() {
// the checkboxes should be disposed and rebuilt when input changes
@Override
public void update(ViewerCell cell) {
MyObject system = (MyObject) cell.getElement();
TableItem item = (TableItem) cell.getItem();
Button button;
if (buttonsMap.containsKey(cell.getElement())) {
button = rightTableButtons.get(cell.getElement());
} else {
button = new Button((Composite) cell.getViewerRow().getControl(), SWT.CHECK);
button.setEnabled(true);
buttonsMap.put(cell.getElement(), button);
TableEditor editor = new TableEditor(item.getParent());
editor.grabHorizontal = true;
editor.grabVertical = true;
editor.setEditor(button, item, cell.getColumnIndex());
editor.layout();
}
}
}
});
TL;DR: 不可用 nativley,但可以通过 epic hackery 实现。
复选框实际上是一个 OS 功能。由于 SWT 是 cross-platform,我们依赖它由 OS.
提供AFIK 所有 OS (Gtk/Win32/Cocoa) 唯一提供的是第一列上的单个复选框。 其他 花哨的功能必须手动实现。
我见过人们这样做的一种方法是绘制自定义图标,然后在您使用事件侦听器单击它时更新图标。
关于如何在右侧绘制图标的示例在this snippet中。单击 checked/unchecked.
时,您必须添加单击侦听器才能更改图标请注意,这可能会导致您的应用程序在不同平台和主题(例如深色主题)之间看起来不一致。 为了解决这个问题,我们有一些人实际上生成了一个本机复选框,然后以编程方式拍摄屏幕截图,然后将其绘制在列的右侧。我认为这是最好的黑客技术。
如果您有任何问题,请告诉我。