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를 놓쳤다면 - 나의 사과와 심지어 그것들을 가리키는 것도 좋을 것입니다.
해결책
기본적으로 탭은 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");
}}
);