我面临一个奇怪的问题。我有一个可编辑的ComboBox和一些项目。运行我的代码后如果我在ComboBox中键入内容并调用 getValue() 函数,那么它会给我 null 值。
这是我的代码(thenewboston): 包裹申请;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
Stage window;
Scene scene;
Button button;
ComboBox<String> comboBox;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
window = primaryStage;
window.setTitle("ComboBox Demo");
button = new Button("Submit");
comboBox = new ComboBox<>();
comboBox.getItems().addAll(
"Good Will Hunting",
"St. Vincent",
"Blackhat"
);
comboBox.setPromptText("What is your favorite movie?");
comboBox.setEditable(true);
button.setOnAction(e -> printMovie());
//ComboBoxes also generate actions if you need to get value instantly
comboBox.setOnAction( e -> System.out.println("User selected " + comboBox.getValue()) );
VBox layout = new VBox(10);
layout.setPadding(new Insets(20, 20, 20, 20));
layout.getChildren().addAll(comboBox, button);
scene = new Scene(layout, 300, 250);
window.setScene(scene);
window.show();
}
private void printMovie(){
System.out.println(comboBox.getValue());
}
}
我使用的是Windows 8.1,Eclipse Mars(4.5)和Java 1.8.0_66
答案 0 :(得分:6)
根据getValue()
的文档:
如果是,则将此ComboBox的值定义为所选项 输入不可编辑,或者如果可编辑,则为最新用户 action:用户输入的值或最后选择的项目。
getValue()
将不会返回“用户输入的值”,直到用户使用操作键(通常是键盘上的Enter
键)接受其输入文本。
因此,getValue()
将在这些场景中返回以下内容,并且在完成预期时会考虑到以下细节:
输入文字“text”,但不接受操作键: null
文字,“文字”,输入到组合框中,并被接受 操作键:文字
选择下拉组合项目“Good Will Hunting”: Good Will Hunting
一旦用户接受了使用操作键输入的文本,将返回正确的值而不是null。如果您想将实际文本输入到组合框中,您可以考虑检索组合框编辑器的当前值:
comboBox.getEditor().getText();