我有一个带有各种页面等的Java SWT桌面应用程序pp。除了Tab键顺序之外它完全正常 - 完全没有。当我在“字段1”并按键盘上的Tab键时,我希望应用程序跳转到“字段2”,因此在输入第一个字段后,我不必单击第二个字段。
通常有“setTabList”,您可以在其中设置“通过表单制表”的正确顺序。我的问题是我甚至不需要设置正确的顺序,标签根本不起作用。
当我在我的表格字段并按Tab键时,我可以看到Windows“工作圈”(或其他任何名称)并且没有任何反应。光标完全保持在同一位置。它不会跳到另一个领域,我不知道为什么。
通常我的代码:
public void createControl(Composite parent) {
Composite container = new Composite(parent, SWT.BORDER);
setControl(container);
fieldOne = new StyledText(container, SWT.NONE);
fieldOne.setBounds(whatever);
fieldOne.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent arg0) {
txtChanged();
}
});
fieldTwo = new StyledText(container, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
fieldOne.setBounds(whatever);
fieldOne.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent arg0) {
txtChanged();
}
});
Control[] controls = { fieldOne, fieldTwo };
container.setTabList(controls);
}
即使我将Control []和container.setTabList行留下,也没有任何反应。
有什么想法吗?
答案 0 :(得分:1)
在StyledText
控件选项卡中,通常只需将光标移动到控件内的下一个制表位。 Ctrl + Tab 移动到下一个控件。
您可以使用遍历侦听器覆盖它:
fieldOne.addTraverseListener(new TraverseListener() {
@Override
public void keyTraversed(final TraverseEvent e) {
if (e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
e.doit = true;
}
}
});
您的主要监听器也可能干扰正常操作。如果你想知道的是文本已经改变,请使用ModifyListener
。