문제

내가하고 싶은 것은 테이블의 요소들 사이를 탭할 수 있다는 것입니다.

나는 현재 이와 같은 내 테이블을 만들고 있습니다.

this.tableViewer = 
            new TableViewer(parent , SWT.FULL_SELECTION);

   tableViewer.setUseHashlookup(true);
        table = tableViewer.getTable();

        GridData gridData = new GridData(GridData.FILL_BOTH);
        gridData.grabExcessVerticalSpace = true;
        table.setLayoutData(gridData);

        table.setLinesVisible(true);
        table.setHeaderVisible(true);

        ...

   /** Create the Cell Editor Array - will hold all columns **/
        editors = new CellEditor[table.getColumnCount()];
        /** Cell Editor Row 1 **/


  /** Set the column properties **/
        tableViewer.setColumnProperties(columnNames);

        /** Assign the cell editors to the viewer **/
        tableViewer.setCellEditors(editors);

        /** Set the cell modifier for the viewer **/
        tableViewer.setCellModifier(new MyCellModifier(this));
        //Create the Table Viewer

        /** Table Viewer Content and Label Provider **/
        tableViewer.setContentProvider(new MyContentProvider(this));
        tableViewer.setLabelProvider(new MyLabelProvider());

그러나 테이블을 설정하는 방법을 잘 모르겠습니다. 다른 모든 것은 열을 편집하고 데이터 표시 등까지 작동합니다.이 마지막 부분에 붙어 있습니다.

내가 명백한 문서 나 Javadocs를 놓쳤다면 - 나의 사과와 심지어 그것들을 가리키는 것도 좋을 것입니다.

도움이 되었습니까?

해결책

기본적으로 탭은 SWT 테이블의 셀에서 셀로 점프하지 않는다고 생각합니다. 대신 다음 컨트롤로 이동합니다. 탭을 누르면 가로 지르지 말라고 말해야합니다.

KeyListener keyListener = new KeyLisener()
{
    public void keyPressed(KeyEvent evt)
    {
        if (evt.keyCode == SWT.TAB)
        {
            // There are numerous setSelection methods.  I'll leave this to you. 
            tableViewer.getTable().setSelection(...)
        }
    }

    public void keyReleased(KeyEvent evt){}
}

TraverseListener traverseListener = new TraverseListener()
{
    public void keyTraversed(TraverseEvent evt)
    {
        if (evt.keyCode == SWT.TAB)
            evt.doit = false;
    }
}

tableViewer.getTable().addKeyListener(keyListener);
tableViewer.getTable().addTraverseListener(traverseListener);

또한 Derbiggi가 제안한 것처럼 리스너는 TableViewer가 아닌 테이블 개체에 추가해야합니다.

다른 팁

솔루션이지만 thehiatus 게시 된 수준은 매우 낮으며 작동하지 않을 것입니다 (테스트하지 않았습니다). Jface는이 특정 문제에 대한 프레임 워크를 제공합니다. 참조 org.eclipse.jface.viewers.TableViewerFocusCellManager 와 함께 org.eclipse.jface.viewers.CellNavigationStrategy 이 문제를 해결하기위한 수업.

나는 원하는 행동을 얻을 수 없었다 TraverseListener (테이블 내에서 가로지 않을 것입니다), 나는 그것을 FocusCellManager 그리고 CellNavigationStrategy. 마침내이 솔루션을 발견하여 행 내에서 열에서 열로 탭하고 편집기를 자동으로 활성화 할 수 있습니다.

Viewer viewer =  ...

TableViewerFocusCellManager focusCellManager =
    new TableViewerFocusCellManager(
        viewer,
        new FocusCellHighlighter(viewer) {});

ColumnViewerEditorActivationStrategy editorActivationStrategy =
    new ColumnViewerEditorActivationStrategy(viewer) {

            @Override
            protected boolean isEditorActivationEvent(
                ColumnViewerEditorActivationEvent event) {
                    ViewerCell cell = (ViewerCell) event.getSource();
                   return cell.getColumnIndex() == 1 || cell.getColumnIndex() == 2;
            }

};

TableViewerEditor.create(viewer, focusCellManager, editorActivationStrategy,
    TableViewerEditor.TABBING_HORIZONTAL);

Keylistener를 추가하고 선택 또는 초점을 다음 셀로 설정해야합니다.

tableViewer.getTable().addKeyListener(new KeyListener(){

   public void keyPressed(KeyEvent e) {

       System.out.println("Key Pressed");
       if (e.keycode == SWT.TAB)
       {
           System.out.println("Detected TAB key");
           // set table viewer selection
       }
   }

   public void keyReleased(KeyEvent e) {

       System.out.println("Key Released");
   }}
);

또한 테이블의 요소 사이에 탭을 구현해야했습니다. 우리는 성운의 그리드를 테이블로 사용합니다. 첫째, 나는 초점을 테이블 밖으로 나가는 것을 막는 초점을 억제해야했다.enter image description here

그런 다음 초점/선택을 다음 셀로 이동시키는 키 리스너를 추가했습니다.

enter image description here

또한 선택한 셀을 하나의 셀을 오른쪽으로 이동하고 행 끝에서 다음 행의 시작 부분으로 이동하기 위해 내 자신의 알고리즘을 만들었습니다. 테이블 끝에 도달하면 선택이 테이블의 첫 번째 셀로 다시 이동합니다.

이것은 나에게 문제를 해결했다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top