2

JTextFieldを拡張するクラスがあり、CTRL-Shift-Oで何かを実行したいと思います。私はそれを聞いていました

JTextFieldExtension.addKeyListener(new KeyAdapter() {

public void keyReleased(KeyEvent e)
{
}

}

e.isControlDown()とe.isShiftDown()の助けを借りて、それはうまくいきました。しかし、フィールドのテキストも左側から右側にシフトしていることに気づきました。どうやらこれはJTextFieldのデフォルトの動作です。だから私はSOでこのスレッドを見つけました。これは役に立ったようです:

JTextFieldでデフォルトのテキストフィールドショートカットを無効にする方法

そのスレッドから、jtextField.getInputMap()。setParent(null);を呼び出します。その動作を非アクティブ化しました。しかし、それはまた、Ctrl-Cと私がまだ保持したい他の有用なマッピングを取り除きました。そこで、KeyStrokeの「ctrlshiftO」だけを削除するための提案された方法を試しました。しかし、どれも機能していないようです。

現在、クラスのコンストラクターには次のものがあります。

     this.getInputMap().put(KeyStroke.getKeyStroke("shift ctrl pressed O"), null);
     KeyStroke[] strokes = this.getInputMap().allKeys();
     for (KeyStroke ks : strokes)
     {
        System.out.println(ks.toString());
     } 

System.out.PrintlnがリストするallKeyの1つとして「shiftctrlpressedO」を表示しているにもかかわらず、機能しません。また、Put()の代わりにInputMap.removeを呼び出してみましたが、成功しませんでした。

私は何が欠けていますか?

4

2 に答える 2

4

この場合、入力マップからのキーの削除は期待どおりに機能していないようですが、インストールされたアクションをオーバーライドして、「コンポーネントの向きを切り替える」ことを効果的に無効にすることができます。Swing では、入力マップはキーストロークをオブジェクト (通常は文字列) にマップします。これはアクション マップの識別子として機能し、対応するアクションを再度保持します。したがって、ctrl+shift+O を無効にする簡単な方法は次のとおりです。

myComponent.getInputMap().put(KeyStroke.getKeyStroke("shift ctrl pressed O"), "Nothing");

これは単にキーストロークをアクション マップに含まれていないもの (文字列 "Nothing"、"Foo" など) に再マップするだけなので、ctrl+shift+O を押しても何も起こりません。

編集:これは、リンクしたスレッドで提案されたことがわかります。ただし、上記のコードがテキスト フィールドに対して機能することを確認しました。もしそうでない場合は、コード内の呼び出しの短い例を提供してください。

于 2012-08-11T00:01:44.713 に答える
0

デフォルトのバインディングはすべて、InputMapコンポーネントの にリストされています。これを行う別の方法を示したかっただけです。これは、達成しようとしていることを考えると、より良い方法です。

        myTextComponent.getActionMap().put("toggle-componentOrientation", myAction});
于 2014-08-28T19:48:43.463 に答える