【问题标题】:JavaFx 2.2 editable ComboBox left arrow keyJavaFx 2.2 可编辑组合框左箭头键
【发布时间】:2012-12-03 18:41:24
【问题描述】:

可编辑的 JavaFx ComboBoxes 运行良好,但左箭头键被解释为 Shift-TAB。

如您所见,焦点设置在 ComboBox 上,插入点位于其字段的中间。按左箭头键将焦点移动到第一个控件,按右箭头键时图像左侧的 TextField 将插入的字符向右移动一个字符,就像在任何 TextField 中一样。

如何捕获事件以在可编辑的 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();
}

【问题讨论】:

  • 真的吗?多么奇怪的行为……我必须在这里测试一下。

标签: java javafx-2 javafx


【解决方案1】:

答案是围绕此 SO 帖子 "key bindings in javafx" 中所示的键绑定。

此代码捕获 LEFT 事件:

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

仅此而已,但我很惊讶,因为左箭头键按预期移动了插入点,只删除了不希望的行为。为什么?

【讨论】:

猜你喜欢
  • 2014-07-21
  • 2021-05-09
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多