2009-09-30 4 views
6

테이블의 요소간에 탭을 만들 수 있습니다.TableViewer의 필드 사이의 탭

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

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를 놓친 경우 - 제 사과와 심지어 위의 내용을 지적해도 좋습니다.

+0

어떤 방향으로 탭하고 싶습니까? –

답변

7

나는 생각한다. 대신 다음 컨트롤로 이동합니다. 탭이 또한

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에 추가 할 필요가 통과하지 말 것을 말할해야합니다.

+0

코드의 선택 코드 (이 예에서 tableViewer.getTable(). setSelection (...))를'keyCode == SWT.TAB' 브랜치에 넣으면 코드가 단순화 될 수 있습니다. TraverseListener '를 호출합니다. 이것에 의해 여분의'KeyListener '가 절약됩니다. –

1

당신은 다음 셀에 모든 KeyListener를 추가하고 선택을 설정하거나 초점을 맞출 필요가 : 기본 탭은 SWT 테이블의 셀에서 셀로 이동하지 않습니다에 의해

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"); 
    }} 
); 
+0

org.eclipse.jface.viewers.TableViewer 은 KeyListener를 허용하지 않습니다. –

+2

작동하는지 모르겠지만 tableViewer.getTable()이이를 받아들입니다. – derBiggi

+0

그게 문제 였어 –

9

게시 된 솔루션 thehiatus은 매우 낮은 수준이며 아마도 테스트를 거치지 않았지만 JFace는이 특정 문제에 대한 프레임 워크를 제공합니다. 이 문제를 해결하려면 과 org.eclipse.jface.viewers.CellNavigationStrategy 클래스를 참조하십시오.

+1

그것은 유용한 포인터이지만,이 코드를 정확하게 사용하는 방법에 대한 설명이나 샘플 코드로는 더 좋은 대답이 될 것입니다. – Kris

3

TraverseListener으로 원하는 동작을 얻지 못했습니다. 테이블 안에서 이동하지 않고 FocusCellManagerCellNavigationStrategy으로 작동하는 데 문제가있었습니다. 마침내이 솔루션을 사용하여 행의 열에서 열로 탭하고 자동으로 편집기를 활성화 할 수있었습니다.

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); 
0

또한 테이블의 요소간에 탭을 구현해야했습니다. 우리는 표로 성운으로부터 그리드를 사용합니다. 첫 번째로 초점 이동을 억제하여 테이블 밖으로 이동하지 못하게해야했습니다. 나는 또한 오른쪽에 선택 하나의 셀을 이동하는 내 자신의 알고리즘을 만들어

enter image description here

: enter image description here

후 나는 다음 셀에 포커스/선택을 이동하는 키 리스너를 추가 행의 끝에서 다음 행의 시작 부분으로 이동하십시오. 표가 끝나면 선택 항목이 표의 첫 번째 셀로 돌아갑니다.

이 문제가 해결되었습니다.

관련 문제