JavaFX 2.2에서 JavaFX 8로 응용 프로그램을 이식 한 후에 편집 가능한 ComboBox의 캐럿이 누락되었습니다. 항목 선택시 ComboBox를 편집 가능으로 전환해야합니다. Windows 8.1에서 Oracle JDK 1.8 업데이트 102 및 업데이트 112를 사용하여 테스트했습니다.JavaFX 8 : 스위치 편집 가능한 ComboBox의 캐럿이 누락되었습니다.
ComboBox에서 포커스를 잃고 포커스를 되찾았을 때, 캐럿이 표시됩니다.
람다를 인터페이스 구현으로 변경하고 Platform.runLater
을 제거한 후 실제로 JavaFX 2.2에서 작동합니다.
import javafx.application.Application;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TestEditableComboBox extends Application{
@Override
public void start(Stage primaryStage) throws Exception{
ComboBox<String> comboBox = new ComboBox<String>(FXCollections.observableArrayList("item 1",
"item 2",
"editable"));
comboBox.setMinWidth(100D);
comboBox.setMaxWidth(100D);
comboBox.valueProperty().addListener((observable,
oldValue,
newValue) -> {
if (newValue != null){
if ("editable".equals(newValue)){
// JavaFX 2.2: comboBox.setEditable(true);
Platform.runLater(() -> comboBox.setEditable(true));
}
else{
// JavaFX 2.2: comboBox.setEditable(true);
Platform.runLater(() -> {
comboBox.setEditable(false);
comboBox.getSelectionModel().select(newValue);
});
}
}
});
VBox vBox = new VBox(new Label("Broken caret"),
comboBox);
Scene scene = new Scene(vBox);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args){
Application.launch(args);
}
}
사람이 주위를 작동 할 수있는 아이디어를 가지고 :
나는 테스트를위한 SSCCE을 포함? 아니면 이것이 JavaFX 8 회귀 버그입니까?추신 : Platform.runLater
이 없으면 ComboBox는 다른 수정이 진행되는 동안 모델이 수정되기 때문에 java.lang.IndexOutOfBoundsException
을 발생시킵니다.