gpt4 book ai didi

java - SWT,添加 Key Listner 时保持默认选项卡顺序

转载 作者:行者123 更新时间:2023-11-29 09:26:14 24 4
gpt4 key购买 nike

我一直在创建一个自定义 TabFolder 扩展,它添加了一个键监听器以允许使用 ALT + # 热键快速切换标签。

通过将 KeyAdapter 添加到我的 TabFolder,事件处理程序仅在您选择了选项卡标题时才能正常工作(在这种情况下,ALT + ARROW_LEFT/ARROW_RIGHT 也可以工作。)。当 TabFolder 中的任何 Widget 处于 Activity 状态时,我需要此热键处于 Activity 状态;但是,如果选择位于不同的选项卡文件夹或选项卡文件夹外的小部件中,则它不应处于 Activity 状态。

为了解决这个问题,我编写了一个简单的递归函数来将键监听器应用于选项卡文件夹的所有子项:

public void applyQuickSwitchKeyBindings() {
removeKeyListener(ka);
addKeyListener(ka);
for(Control c: getChildren())
applyQuickSwitchKeyBindingsToChildren(c);

}

private void applyQuickSwitchKeyBindingsToChildren(Control c) {

if(c==null) return;
if(c instanceof Composite) {
Control[] controls = ((Composite)c).getChildren();
for(Control c2: controls)
applyQuickSwitchKeyBindingsToChildren(c2);
if(controls.length < 1) {
c.removeKeyListener(ka);
c.addKeyListener(ka);
}
}
}

然后,在将控件添加到选项卡组中的每个 TabItem 之后,我调用 applyQuickSwitchKeyBindings()。

好消息是快速切换热键 (ALT + #) 效果很好!

坏消息是原来基于 z-index 的 TAB 排序现在已经不复存在了。当您按下 SWT.TAB 键时,您会失去对当前文本框的关注,并且不会关注其他任何内容...

问题:

1.) 每个控件只能有一个KeyListener吗?

2.) 为什么原来的 TAB 遍历不再起作用了?

提前致谢!

最佳答案

到 1) 我非常确定允许使用多个 KeyListener。

至 2) 我不确定,这取决于您在 KeyAdapter 中执行的操作。也许你也可以发布它?

我只是 Tab 键顺序以某种方式被破坏了,您可以通过调用 setTabList(Control[]) 重置(或更改)它。

setTablList( new Control[] {
control1,
control2,
control3,
....
} );

关于java - SWT,添加 Key Listner 时保持默认选项卡顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1161909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com