Java 选择TableViewer的多个单元格
我使用Java 选择TableViewer的多个单元格,java,eclipse-rcp,jface,Java,Eclipse Rcp,Jface,我使用TableViewer来显示元素矩阵(而不是像往常一样每行显示一个元素)。JFace无法在开箱即用的情况下实现这一点有点尴尬,但我最终得到了允许单元格选择的表格: public class TableCellSelection { public static void main(String[] args) { final Display display = new Display(); final Shell shell = new Shell(
TableViewer
来显示元素矩阵(而不是像往常一样每行显示一个元素)。JFace无法在开箱即用的情况下实现这一点有点尴尬,但我最终得到了允许单元格选择的表格:
public class TableCellSelection {
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final TableViewer viewer = new TableViewer(shell,
SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
viewer.setContentProvider(ArrayContentProvider.getInstance());
Arrays.asList("Tic", "Tac", "Toe").forEach(c -> createTableViewerColumn(viewer, c));
viewer.setInput(Arrays.asList("XOX", "OXX", "OXO"));
hookCellSelection(viewer);
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
private static <T extends Comparable<T>> void createTableViewerColumn(TableViewer viewer,
String name) {
final int columnIndex = viewer.getTable().getColumnCount();
final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE);
viewerColumn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return String.valueOf(((String) element).charAt(columnIndex));
}
});
viewerColumn.getColumn().setText(name);
viewerColumn.getColumn().setWidth(100);
}
private static void hookCellSelection(TableViewer viewer) {
final TableViewerFocusCellManager focusCellManager = new TableViewerFocusCellManager(viewer,
new FocusCellOwnerDrawHighlighter(viewer), new CellNavigationStrategy());
final ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(viewer);
final int feature = ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
| ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION;
TableViewerEditor.create(viewer, focusCellManager, actSupport, feature);
}
}
公共类TableCellSelection{
公共静态void main(字符串[]args){
最终显示=新显示();
最终外壳=新外壳(显示);
setLayout(新的FillLayout());
最终的TableViewer=新的TableViewer(外壳,
SWT.MULTI | SWT.H| u滚动| SWT.V| u滚动| SWT.FULL|选择| SWT.BORDER);
setContentProvider(ArrayContentProvider.getInstance());
asList(“Tic”、“Tac”、“Toe”).forEach(c->createTableViewerColumn(viewer,c));
setInput(Arrays.asList(“XOX”、“OXX”、“OXO”);
用户选择(查看器);
shell.pack();
shell.open();
而(!shell.isDisposed()){
如果(!display.readAndDispatch()){
display.sleep();
}
}
display.dispose();
}
私有静态void createTableViewerColumn(TableViewer,
字符串名称){
final int columnIndex=viewer.getTable().getColumnCount();
最终TableViewerColumn viewerColumn=新的TableViewerColumn(查看器,SWT.NONE);
viewerColumn.setLabelProvider(新ColumnLabelProvider(){
@凌驾
公共字符串getText(对象元素){
返回String.valueOf((String)元素).charAt(columnIndex));
}
});
viewerColumn.getColumn().setText(名称);
viewerColumn.getColumn().setWidth(100);
}
私有静态void hookCellSelection(TableViewer){
最终TableViewerFocusCellManager focusCellManager=新的TableViewerFocusCellManager(查看器,
新的FocusCellOwnerDrawHighlighter(查看器),新的CellNavigationStrategy();
final ColumnViewerEdit或ActivationStrategy actSupport=新ColumnViewerEdit或ActivationStrategy(查看器);
最终int功能=ColumnViewerEditor.TABBING_水平| ColumnViewerEditor.TABBING_移动_到_行_邻居
|ColumnViewerEditor.TABBING_垂直| ColumnViewerEditor.KEYBOARD_激活;
创建(查看器、focusCellManager、actSupport、功能);
}
}
现在客户端想要选择多个单元格,但我无法确定是哪个类的hookCellSelection
方法负责取消选择上一个单元格(表是SWT.MULTI
,因此可以选择多行)
搜索问题以断开的链接和移动的教程结束
如何在表格查看器中选择多个单元格