javafx-2,仅在输入键上设置的可编辑ComboBox值

时间:2012-11-12 22:59:05

标签: combobox javafx-2

我有一个javafx可编辑的ComboBox。
仅当我按Enter键时才更新value属性,而不仅仅是退出ComboBox。
在我看来,它是一个错误,而不是一个设计功能,因为非聚焦控件显示一个值不会被其value属性反映的奇怪。

这是一个显示问题的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键,它是相同的)]

[单击返回组合,按Enter键并单击文本字段]
你好

第一个空是奇怪的,也许正如我之前所说的那样。我快速搜索了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

问题就消失了。

1 个答案:

答案 0 :(得分:2)

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"));