Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 选择TableViewer的多个单元格_Java_Eclipse Rcp_Jface - Fatal编程技术网

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
,因此可以选择多行)

搜索问题以断开的链接和移动的教程结束

如何在
表格查看器中选择多个单元格