1

文字、数字、句読点などの文字を入力するときに特定の動作をする JTree を作成して、フィルター、デコレーターなどを適用しようとしています。

すべてが正常に機能しているように見えますが、文字を入力すると選択が自動的に変更され、フィルターと同じように動作しないようです。この動作は で定義されてBasicTreeUI.Handler.keyTyped(KeyEvent e)いるように見えますが、この動作をルック アンド フィールに依存しない方法で簡単に回避またはオーバーライドする方法がわかりません。

助言がありますか?

4

3 に答える 3

2

これらのキーの押下に反応する上に存在するキー バインディングがあります。JTree次のコード スニペットは、入力マップの 1 つで使用可能なバインディングを出力します。

import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JTree;
import javax.swing.KeyStroke;
import java.awt.EventQueue;

public class TreeActionMap {
  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      @Override
      public void run() {
        JTree tree = new JTree(  );
        InputMap inputMap = tree.getInputMap( JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
        KeyStroke[] keyStrokes = inputMap.allKeys();
        for ( KeyStroke keyStroke : keyStrokes ) {
          Object actionCommand = inputMap.get( keyStroke );
          System.out.println( "keyStroke = " + keyStroke );
          System.out.println( "actionCommand = " + actionCommand );
        }
      }
    } );

  }
}

したがって、すべてのインスタンスをループしてそれらすべてInputMapを呼び出した場合、はそれらのキーを押しても反応しなくなります。clearJTree

于 2012-08-07T05:48:37.907 に答える