Согласно документации , текст подсказки здесь вообще не должен отображаться:
Текст подсказки отображается не при всех обстоятельствах, он зависит от подклассовComboBoxBase, чтобы уточнить, когда будет показан promptText.Например, в большинстве случаев текст подсказки никогда не будет отображаться, если поле со списком недоступно для редактирования (то есть текст подсказки отображается только тогда, когда ввод пользователя разрешен посредством ввода текста).
Если выЕсли вы хотите, чтобы текст подсказки был пустым (а у вас нет редактируемого поля со списком), используйте нестандартный 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);
}
}
});
Обратите внимание, что вам кажется также необходимо установить текст приглашения, как в коде в вопросе, чтобы текст отображался изначально.Я предполагаю, что это из-за той же ошибки (я предполагаю, что код библиотеки изначально неправильно устанавливает текст ячейки кнопки в текст подсказки; если текст подсказки не задан, текст устанавливается на null
, после вызывается метод обновления ячейки кнопки).
И вы, очевидно, можете сделать это многоразовым, создав именованный подкласс ListCell
:
public class PromptButtonCell<T> extends ListCell<T> {
private final StringProperty promptText = new SimpleStringProperty();
public PromptButtonCell(String promptText) {
this.promptText.addListener((obs, oldText, newText) -> {
if (isEmpty() || getItem() == null) {
setText(newText);
}
});
setPromptText(promptText);
}
public StringProperty promptTextProperty() {
return promptText ;
}
public final String getPromptText() {
return promptTextProperty().get();
}
public final void setPromptText(String promptText) {
promptTextProperty().set(promptText);
}
@Override
protected void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(getPromptText());
} else {
setText(item);
}
}
}
итогда просто
cboSelection.setButtonCell("Select Subject");
cboSelection.setButtonCell(new PromptButtonCell<>("Select Subject"));