Выбор Nebula GridViewer не работает

Я использую Nebula Grid для отображения листа Excel в моем приложении RCP. У меня есть требование выбрать все строки. Мой код выглядит следующим образом:

private void addKeyListener() {
    this.gv.getGrid().addKeyListener(new KeyListener() {

        @Override
        public void keyPressed(KeyEvent arg0) {

        }

        @Override
        public void keyReleased(KeyEvent e) {

            if(e.stateMask==SWT.CTRL && e.keyCode =='a'){
                ArrayList al = (ArrayList) gv.getInput();
                //System.out.println("ctrl+c pressed");
                gv.setSelection(new StructuredSelection(al.toArray()),true);

                //gv.getGrid().setSelection(0, al.size()-1);
                //gv.getGrid().selectAll();
                //gv.getGrid().setSelection(new int[]{1,2});
                //gv.getGrid().setSelection(1);

                //gv.getGrid().setSelectionEnabled(true);
                //gv.getGrid().select(new int[]{1,2,3});
                //gv.refresh();
            }

но это не работает. что мне не хватает?


person ssdimmanuel    schedule 24.07.2015    source источник


Ответы (1)


Вы не упомянули, какой тип поведения выбора используется сеткой в ​​вашем коде. т. е. выбор строки или ячейки, одиночный или множественный выбор (стили SWT.SINGLE и SWT.MULTI).

Установка стиля на SWT.MULTI при инициализации сетки, кажется, помогает.

Вот фрагмент, который работает для меня.

public class GridSnippet {
    public static void main (String [] args) {
        Display display = new Display ();
        Shell shell = new Shell (display);
        shell.setLayout(new FillLayout());

        final Grid grid = new Grid(shell,SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI);
        grid.setHeaderVisible(true);
        // grid.setCellSelectionEnabled(true);
        GridColumn column = new GridColumn(grid,SWT.NONE);
        column.setText("Column 1");
        column.setWidth(100);
        GridItem item1 = new GridItem(grid,SWT.NONE);
        item1.setText("First Item");
        GridItem item2 = new GridItem(grid,SWT.NONE);
        item2.setText("Second item");
        GridItem item3 = new GridItem(grid,SWT.NONE);
        item3.setText("Third Item");
        grid.addKeyListener(new KeyListener() {

            @Override
            public void keyPressed(KeyEvent arg0) {
            }

            @Override
            public void keyReleased(KeyEvent e) {
                if(e.stateMask==SWT.CTRL && e.keyCode =='a'){
                    System.out.println("ctrl+c pressed");

                    grid.selectAll();
                }
            }
        });

        shell.setSize(200,200);
        shell.open ();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch ()) display.sleep ();
        }
        display.dispose ();
    }
}
person Monikka    schedule 27.07.2015
comment
Я использовал следующие биты стиля gv = new GridTableViewer(this.container, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION);, но это не сработало. Я изменил это на gv = new GridTableViewer(this.container, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI);. Выбор все теперь работает. Спасибо - person ssdimmanuel; 27.07.2015