1

編集可能な JavaFx ComboBoxes は正常に機能しますが、左矢印キーは Shift-TAB として解釈されます。

ここに画像の説明を入力

ご覧のとおり、フォーカスは ComboBox に設定され、挿入ポイントはそのフィールドの中央にあります。左矢印キーを押すとフォーカスが最初のコントロールに移動し、右矢印キーを押すとイメージの左側にある TextField が、任意の TextField のように期待どおりに 1 文字右に挿入されます。

イベントをキャッチして、編集可能な ComboBox で TextField の動作を再現するにはどうすればよいですか?

ComboBox.setOnKeyPressed()およびevent.consume( ) を介してキー イベントをキャッチしようとしましたが、成功しませんでした。

この予期しない動作を再現するための最小限のプログラムを次に示します。

@Override
public void start( Stage stage ) {
   stage.setTitle( "Editable ComboBox and left-arrow key" );

   ComboBox<String> cmbBx = new ComboBox<>();
   cmbBx.getItems().addAll( "A", "B", "C", "D", "E" );
   cmbBx.setMinWidth( 150 );
   cmbBx.setEditable( true );
   cmbBx.setOnKeyPressed( new EventHandler<KeyEvent>(){
      @Override public void handle( KeyEvent event ) {
         System.err.println( event );
         event.consume(); }}); // Consuming left arrow key is inoperant

   GridPane grid = new GridPane();
   grid.setVgap( 4 );
   grid.setHgap( 4 );
   grid.setPadding( new Insets( 4, 4, 4, 4 ));

   grid.add( new Label( "TextField:" ), 0, 0 );
   grid.add( new TextField()          , 1, 0 );
   grid.add( new Label( "ComboBox:" ) , 2, 0 );
   grid.add( cmbBx                    , 3, 0 );

   stage.setScene( new Scene( grid ));
   stage.show();
}
4

1 に答える 1

1

答えは、このSO投稿「javafxのキーバインディング」に示されているようなキーバインディングに関するものです。

このコードは、LEFT イベントをキャッチします。

  cmbBx.addEventFilter( KeyEvent.ANY, new EventHandler< KeyEvent >() {
     @Override public void handle(KeyEvent event ) {
        if( event.getCode() == KeyCode.LEFT ) {
           event.consume(); }}});

それだけですが、左矢印キーは期待どおりに挿入ポイントを移動し、望ましくない動作だけが削除されるため、驚いています。なんで?

于 2012-12-16T14:51:02.297 に答える