2012-11-12 62 views
3

我有一個javafx可編輯組合框。
只有當我按下Enter鍵時,value屬性纔會更新,而不僅僅是退出組合框。
在我看來,這是一個錯誤,而不是一個設計特性,因爲非聚焦的控件顯示的值不會被它的值屬性反映出來會很奇怪。javafx-2,可編輯ComboBox值只在輸入鍵上設置

這裏是一個SSCE,顯示問題:

import javafx.application.Application; 
import javafx.beans.*; 
import javafx.scene.Scene; 
import javafx.scene.control.*; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class T02 extends Application { 

public static void main (String [] args) { launch(args); } 

@Override public void start(Stage stage) throws Exception { 

    System.out.println("javafx.runtime.version: " + System.getProperties().get("javafx.runtime.version")); 

    VBox vbox = new VBox(); 

    //this combobox is the object of the investigation 
    final ComboBox comboBox = new ComboBox(); 
    comboBox.setEditable(true); 
    vbox.getChildren().add(comboBox); 

    //I need another component just to allow the ComboBox to loose the focus 
    TextField textField = new TextField(); 
    vbox.getChildren().add(textField); 

    //And here it is: when comboBox looses focus, i print its state 
    comboBox.focusedProperty().addListener(new InvalidationListener() { 
     @Override public void invalidated(Observable observable) { 
      //return if it has the focus: i am just interested on focus lost 
      if (comboBox.focusedProperty().get()) {return;} 
      System.out.println(comboBox.getValue()); 
     } 
    }); 

    stage.setScene(new Scene(vbox)); 
    stage.show(); 
} 

} 


輸出:
[連擊寫的東西,然後點擊其他控制(或按Tab鍵,它是相同的)

[點擊重新組合,按回車鍵,然後按向下的文本字段]
你好

第一個空奇怪的是,也許越野車就像我說的之前。我在jira上做了一個快速搜索,並沒有發現這種行爲。 (也許我還沒有注意到這一點)

更新
好吧,我剛剛加入

System.out.println("javafx.runtime.version: " + System.getProperties().get("javafx.runtime.version")); 

並得到結果:

javafx.runtime.version: 2.1.something 

我已經升級後的版本:

javafx.runtime.version: 2.2.3-b05 

問題消失。

回答

2

相關bug在RT-21454 ComboBox value should update when focus leaves it已修復。

更新

AgostinoX報告說,該問題通過升級到JavaFX 2.2.3-b05解決。

通過將下面的代碼放入JavaFX應用程序的start方法中,可以檢查您使用的javafx版本。

System.out.println("javafx.runtime.version: " + System.getProperties().get("javafx.runtime.version")); 
+0

您的回答將我引向解決方案,也許您可​​以爲閱讀問題的人附加一個明確的「檢查您的javafx版本」建議。 – AgostinoX

+0

我在您的問題更新中根據您的建議和版本檢查代碼澄清了答案。 – jewelsea