У меня проблемы с JaxaFX 11 ComboBox
(похоже, что в JavaFX 8 все работает нормально).
Для нередактируемого комбо, то есть отображения выбранного значения в ячейке кнопки (не в редактируемом текстовом поле), значение не отображается (ячейка кнопки, вероятно, считается "пустой"), если новое значение не включено в список элементов комбо, за одним исключением:
Если предыдущее значение равно null
(например, отменить выбор предыдущего ненулевого значения с помощью клавиатуры во всплывающем списке), новое ненулевое значение отображается правильно.
Посмотрите простой код, чтобы воспроизвести проблему. Изначально значение комбинации равно null
. Нажмите кнопку, чтобы установить значение вне списка элементов. Отображается ОК. Затем выберите какое-либо значение из всплывающего окна. Попробуйте еще раз нажать кнопку. Теперь комбо остается пустым, хотя значение комбо было изменено.
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.collections.FXCollections;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class ComboTest extends Application {
private ComboBox<String> testCombo;
@Override public void start(Stage primaryStage) {
Button btn = new Button("Set test value outside list");
btn.setOnAction(e -> {
testCombo.setValue("test value outside list");
});
testCombo = new ComboBox<>(FXCollections.observableArrayList(
"Option 1", "Option 2", "Option 3"
));
testCombo.setPromptText("null now!");
TextField valueTextField = new TextField();
testCombo.valueProperty().addListener((ob, ov, nv) -> {
valueTextField.setText("combo value: " + nv);
});
VBox root = new VBox(5);
root.setPadding(new Insets(5));
root.getChildren().addAll(btn, testCombo, valueTextField);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Test Combo");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Я что-то пропустил? Я не смог найти никакого обходного пути. Я попытался отладить, но не смог найти ответ. Вроде сначала ставится правильный текст, а потом опять стирается.
(JDK 11.0.2, JavaFX 11.0.2, Netbeans 10)