JavaFx 2.2 可编辑组合框左箭头键

标签 java javafx-2 javafx

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

enter image description here

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

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

最佳答案

答案是围绕键绑定(bind),如这篇 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(); }}});

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

关于JavaFx 2.2 可编辑组合框左箭头键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13901113/

相关文章:

java - 如何使用带有 Action 监听器的方法?

java - 不应在 android manifest 文件中声明 minSdk 版本

java - 在 JavaFX 2 中实现逐步动画

java - "rundll32 url.dll,FileProtocolHandler"的 URL 长度限制?

java - SQL : Select multiple rows with the same ID

java - javafx 中的文本区域有问题吗?

java - 在 FXML 中以声明方式设置样式表

java - 加载页面后如何在 JavaFx.WebView 中运行 javascript 代码?

java: NullPointerExc 为什么当直接在其上调用 lambda 表达式时,List 包含添加的对象。当 lambda 是一个方法时则不然

javafx - 为什么不能设置AnchorPane的可调整大小属性?