我有一个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
问题就消失了。
答案 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"));