Ich habe nach dem Update auf JDK/JRE 8u66 das Problem, dass meine editierbare Combobox keine eingaben mehr speichert wenn sie den Fokus durch die Maus verliert.
...fillLevelComboBox.editableProperty().set(true);
}
private void addStringConverterToComboBox(final ComboBox<Integer> tFillLevelComboBox) {
tFillLevelComboBox.setConverter(new StringConverter<Integer>() {
@Override
public String toString(Integer object) {
return object + "%";
}
@Override
public Integer fromString(String string) {
Integer value = null;
try {
value = Integer.parseInt(string);
} catch (NumberFormatException ignored) {
}
if (string.matches("[0-9]+[%]")) {
value = Integer.parseInt(string.split("%")[0]);
}
if (value != null && !tFillLevelComboBox.getItems().contains(value)) {
tFillLevelComboBox.getItems().add(value);
tFillLevelComboBox.getItems().sort((o1, o2) -> o2.compareTo(o1));
}
if (value != null) {
return value;
}
return null;
}
});
}
Der StringConverter wird überhaupt nicht aufgerufen. Ebenso der ChangeListener, der der selectionModelProperty hinzugefügt wurde.
Mit der zuvor installierten Version (JDK8u45) hat es funktioniert. Ist dies ein Bug oder hat sich etwas an der API geändert?
Also in u60 funktioniert es auch nicht. In u45 klappt es so wie es soll.
Verwendetes Betriebssystem Kubuntu 15.04
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("ComboBox!");
ComboBox<Integer> comboBox = new ComboBox<>();
for (int i = 100;
i > 0;
i = i - 10) {
comboBox.getItems().add(i);
}
comboBox.editableProperty().set(true);
Button btn = new Button("Combobox Value");
btn.setOnAction(event -> System.out.println(comboBox.getSelectionModel().getSelectedItem()));
StackPane root = new StackPane();
VBox vBox = new VBox();
vBox.getChildren().addAll(comboBox, btn);
root.getChildren().addAll(vBox);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
}
Wenn in die ComboBox ein neuer Wert eingetragen wird, dieser NICHT mit ‘Enter’ bestätigt wird, sondern nur mit der Maus auf den Button geklickt wird, sollte der eingetragene Wert als selektiertes Element ausgewählt werden und auf der Konsole erscheinen. Dies klappt jedoch nicht mehr.