Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何重置组合框并显示PrompText?_Java_Javafx_Combobox - Fatal编程技术网

Java 如何重置组合框并显示PrompText?

Java 如何重置组合框并显示PrompText?,java,javafx,combobox,Java,Javafx,Combobox,注意:我正在扩展重复问题,因为它不包括MCVE。我发现的其他几个类似问题也不包括工作答案 清除选择后,我无法找到让组合框显示提示文本的方法 以下是MCVE: public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception { final VBox root = new VBox(10); root.s

注意:我正在扩展重复问题,因为它不包括MCVE。我发现的其他几个类似问题也不包括工作答案

清除选择后,我无法找到让组合框显示提示文本的方法

以下是MCVE:

public class Main extends Application {

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

        final VBox root = new VBox(10);
        root.setAlignment(Pos.TOP_CENTER);
        root.setPadding(new Insets(10));

        final ComboBox<String> cboSelection = new ComboBox<>();
        final Button btnClear = new Button("Clear");

        // Set ComboBox selections
        final ObservableList<String> subjectsList = FXCollections.observableArrayList();
        subjectsList.addAll("Software", "Math", "Physics");

        // Setup the Subject selection
        cboSelection.setPromptText("Select Subject");
        cboSelection.setItems(subjectsList);

        // Set action for "Clear" button
        btnClear.setOnAction(e -> {
            cboSelection.setValue(null);
        });

        root.getChildren().addAll(cboSelection, btnClear);

        primaryStage.setTitle("ComboBox Demo");
        primaryStage.setScene(new Scene(root, 200, 100));
        primaryStage.show();


    }


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

}
public类主扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
最终VBox根=新VBox(10);
根部设置对齐(位置顶部\中心);
根。设置填充(新插图(10));
最终组合框cboSelection=新组合框();
最终按钮btnClear=新按钮(“清除”);
//设置组合框选项
最终ObservableList subjectsList=FXCollections.observableArrayList();
addAll(“软件”、“数学”、“物理”);
//设置主题选择
cboSelection.setPrompText(“选择主题”);
cboSelection.setItems(主题列表);
//设置“清除”按钮的操作
btnClear.setOnAction(e->{
cboSelection.setValue(null);
});
root.getChildren().addAll(cboSelection,btnClear);
setTitle(“组合框演示”);
原始阶段。设置场景(新场景(根,200100));
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}
单击“清除”按钮将所选值设置为
null
,并清除所选的
组合框
,但提示文本不会再次显示。这似乎不是正常的预期行为

我在按钮的
操作中尝试了
clearSelection()
以及
SetPrompText()
,但似乎无法恢复提示文本。

根据,提示文本实际上不应在此处显示:

提示文本并非在所有情况下都显示,它取决于ComboBoxBase的子类,以明确何时显示PrompText。例如,在大多数情况下,当组合框不可编辑时,将永远不会显示提示文本(即,仅当允许通过文本输入进行用户输入时,才会显示提示文本)

如果要在选择为空(并且没有可编辑的组合框)时看到一些提示文本,请在组合框上使用自定义的
buttonCell

    cboSelection.setPromptText("Select Subject");
    cboSelection.setButtonCell(new ListCell<String>() {
        @Override
        protected void updateItem(String item, boolean empty) {
            super.updateItem(item, empty) ;
            if (empty || item == null) {
                setText("Select Subject");
            } else {
                setText(item);
            }
        }
    });
然后就

cboSelection.setButtonCell("Select Subject");
cboSelection.setButtonCell(new PromptButtonCell<>("Select Subject"));
cboSelection.setButtonCell(“选择主题”);
cboSelection.setButtonCell(新的PromptButtonCell(“选择主题”);

在子类的构造函数中,
empty
的第一个值来自何处?示例类将不会编译。另外,在添加侦听器时,您缺少
promptext
引用的
this
关键字。顺便说一下,我将示例类的构造函数更改为仅设置
promptext
,忽略了侦听器,组合框的功能按预期工作。@Zephyr抱歉,应该是方法调用;请参阅更新。(我测试了第一个版本,但不是可重复使用的版本。)
这是可选的。只有在您稍后更改提示文本时才需要侦听器,而选择为空。啊,这样更好。尽管我仍然相信
这个
是必需的,因为您也将
promptext
作为传递给构造函数的字符串的名称。也就是说,这个答案对当前的问题很有效,我不知道文档对不可编辑的组合框上的提示文本说了什么,所以谢谢你。
cboSelection.setButtonCell("Select Subject");
cboSelection.setButtonCell(new PromptButtonCell<>("Select Subject"));