將應用程序從JavaFX 2.2移植到JavaFX 8後,缺少可編輯ComboBox的插入符號。在選擇項目時應將ComboBox切換爲可編輯。 我使用Oracle JDK 1.8 Update 102和Update 112在Windows 8.1下對其進行了測試。JavaFX 8:在可切換的編輯框中缺少插入符號ComboBox
當ComboBox失去焦點並重新獲得焦點時,插入符號可見。
在將lambda更改爲接口實現並刪除Platform.runLater
之後,它實際上可用於JavaFX 2.2。
我包括用於測試的SSCCE:
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);
}
}
人有一個想法來解決這個身邊?或者這是一個JavaFX 8迴歸bug?
PS:如果沒有Platform.runLater
,ComboBox會拋出java.lang.IndexOutOfBoundsException
,因爲在修改模型的同時正在進行其他修改。