【发布时间】:2018-01-31 09:33:00
【问题描述】:
我想我可能在 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 中的选择时,它会从服务器接收新的值列表。此列表可能仍包含与网格中现有节点相对应的值。它们被重用而不是重新创建。
【问题讨论】:
-
为什么要更改示例?请不要发布诸如移动子弹之类的问题..您可以免费获得我们的时间,因此请尽可能轻松地关注(或领导
) -
@Michael 通常编辑不应该触及代码,除非是像格式化或修复错别字这样的小改动;)但我同意你的观点:你的例子是严格的,让 sillyfly(在对现在已删除的答案)正确猜测根本原因
-
我更改了示例,因为它是错误的。这是一个较早的例子。我需要演示一个带有两个复选框的示例。编辑:所以你改变了我的例子。为什么,我以为我发错了。
-
添加了第二个 ComboBox 以说明该组合框有效,而第一个组合框被锁定。如果您编辑其他人的示例,请对其添加评论...
-
@Michael 在答案中使用了您的最小示例,谢谢 :) 在 OP:是否有第二个组合或更改项目以及删除/读取与 IMO 无关
标签: java javafx javafx-8 javafx-9