我想我可能在 Java 中发现了一个错误,或者我做错了什么。
我根据一些接收到的数据填充了一个容器。容器有一个或多个组合框。在 ComboBox 选择更改时,我收到新数据。然后我清除 GridPane 并重新添加节点(新数据中仍然存在,和/或添加新节点)。
ComboBox 仍然有焦点,但我无法在点击时再次激活它。任何导致 ComboBox 失去焦点的事情(例如聚焦另一个组件)都会导致它再次工作。
这是一个简化的例子。尝试使用 jdk1.8.0_162 和 jdk-9.0.4
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class ComboBoxTest extends Application {
public static void main(String[] args) {
ComboBoxTest.launch(args);
}
@Override
public void start(Stage stage) {
VBox root = new VBox();
final ComboBox<String> choices = new ComboBox<>();
choices.getItems().add("Test1");
choices.getItems().add("Test2");
root.getChildren().add(choices);
choices.getSelectionModel().selectedItemProperty().addListener(
(observable, oldValue, newValue) -> {
root.getChildren().clear();
root.getChildren().add(choices);
});
Platform.setImplicitExit(true);
stage.setScene(new Scene(root));
stage.show();
}
}
设计是动态的。我有一个从服务器接收到的值列表。这用于在网格上创建和放置 ComboBox。当用户更改 ComboBox 中的选择时,它会从服务器接收一个新的值列表。此列表可能仍包含与网格中现有节点相对应的值。它们被重用而不是重新创建。