我正在尝试模拟SWT中的Tab键按下事件,但我找不到任何方法来执行此操作。
我有一个复合包含一个texfield,一个ListViewer和一个按钮。
当我在文本字段中按Tab键时,我想将焦点设置在按钮上,而不是在ListViewer上。
答案 0 :(得分:0)
你调查了这个人吗?
我还没有尝试过这类事情,但上面的代码段更改了标签顺序。
答案 1 :(得分:0)
有两种方法可以解决这个问题:
SWT.Traverse
,阻止该事件并手动强制关注该按钮。以下是两种解决方案的代码:
1
public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new FillLayout());
Button button = new Button(shell, SWT.PUSH);
button.setText("Button");
Text text = new Text(shell, SWT.BORDER);
new Text(shell, SWT.BORDER).setText("This won't get focused.");
shell.setTabList(new Control[] {text, button});
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
2
public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new FillLayout());
Button button = new Button(shell, SWT.PUSH);
button.setText("Button");
Text text = new Text(shell, SWT.BORDER);
new Text(shell, SWT.BORDER).setText("This won't get focused.");
text.addListener(SWT.Traverse, e -> {
if(e.detail == SWT.TRAVERSE_TAB_NEXT)
{
e.doit = false;
button.forceFocus();
}
});
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}