2012-12-16 47 views
1

可編輯的JavaFx ComboBoxes工作正常,但左箭頭鍵被解釋爲Shift-TAB。JavaFx 2.2可編輯組合框左箭頭鍵

enter image description here

正如你所看到的焦點設置爲組合框,並且插入點是在該領域的中間。按下左箭頭鍵將焦點移動到第一個控件,當按下右箭頭鍵時,圖像左側的TextField將插入一個字符向右移動,就像在任何TextField中一樣。

如何捕獲事件以重現可編輯組合框中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(); 
} 
+0

真的嗎?多奇怪的行爲......我得在這裏測試一下。 – ceklock

回答

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(); }}}); 

而這一切,但我很驚訝,因爲左箭頭鍵移動不如預期,只有不希望的行爲被刪除插入點。爲什麼?

+0

請參閱「消費事件」在本頁面的結尾: http://docs.oracle.com/javafx/2/events/processing.htm 也許這是你的問題的答案。我認爲有不同類型的事件,也許左箭頭鍵也是一個InputEvent。 – ceklock