私は、キーリスナーを追加するカスタムTabFolder拡張を作成していて、ALT +#ホットキーを使用してタブをすばやく切り替えることができます。SWT、Key Listnerを追加するときにデフォルトのタブ順序を維持する
TabFolderにKeyAdapterを追加すると、タブヘッダーが選択されている場合(この場合、ALT + ARROW_LEFT/ARROW_RIGHTも機能します)、イベントハンドラが正しく機能します。 TabFolderを使ってウィジェットをアクティブにしたときにこのホットキーをアクティブにする必要があります。ただし、選択がタブフォルダの外にある別のタブフォルダまたはウィジェットにある場合は、アクティブではありません。
はこれを解決するために、私はタブのフォルダの子供たちのすべてにキーリスナーを適用するには、単純な再帰関数を書きました:
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);
}
}
}
その後、私は(applyQuickSwitchKeyBindingsを呼び出す)私が追加した後タブグループ内の各TabItemへのコントロール。
クイックスイッチホットキー(ALT +#)がうまくいったことがうれしかった!
悪い知らせは、z-indexに基づくオリジナルのTAB順序が今やなくなってしまったことです。あなたがあなたの現在のテキストボックスにフォーカスを失うと、何か他のものに焦点を獲得していないSWT.TABキーを押すと...
質問:
1)は、各コントロールは、一つだけのKeyListenerを持つことができますか?
2.)元のTABトラバーサルがもう機能しないのはなぜですか?
ありがとうございます!