题
我想要做的是能够在表元素之间标签。
目前我创造我的表是这样的。
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());
但我不知道如何设置制表。其他的一切就可以作为编辑栏,显示数据等只是停留在这最后一部分。
如果我已经错过了明显的文档或的javadoc - 我的道歉,甚至指向这些将是巨大的。
解决方案
我认为默认选项卡不从细胞跳到细胞在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");
}}
);
不隶属于 StackOverflow