Java 如何重置组合框并显示PrompText?
注意:我正在扩展重复问题,因为它不包括MCVE。我发现的其他几个类似问题也不包括工作答案 清除选择后,我无法找到让组合框显示提示文本的方法 以下是MCVE: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
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"));