Java 阵列中的MedusaFX元素,如果编辑阵列,则不更新屏幕
我正在使用MedusaFX库为我正在进行的项目获取仪表。我正在使用JavaFX应用程序运行一切,并使用Scene Builder创建一个FXML文件来创建布局。我观察到的是如果我这样做Java 阵列中的MedusaFX元素,如果编辑阵列,则不更新屏幕,java,arrays,arraylist,Java,Arrays,Arraylist,我正在使用MedusaFX库为我正在进行的项目获取仪表。我正在使用JavaFX应用程序运行一切,并使用Scene Builder创建一个FXML文件来创建布局。我观察到的是如果我这样做 @FXML private Gauge gauge1 = new Gauge(); gauge1.setValue(30); 然后,gauge1变量获得正确的值集。然而,如果我这样做 @FXML private Gauge gauge1 = new Gauge(); ArrayL
@FXML private Gauge gauge1 = new Gauge();
gauge1.setValue(30);
然后,gauge1变量获得正确的值集。然而,如果我这样做
@FXML private Gauge gauge1 = new Gauge();
ArrayList<Gauge> list = new ArrayList<>();
list.add(gauge1);
list.get(0).setValue(30);
System.out.println(gauge1);
System.out.println(list.get(0));
这个输出让我感到困惑,因为ArrayList似乎创建了Gauge的一个新实例,而不是修改其中的实例。有什么建议吗?当您使用
FXMLLoader.load()
加载fxml文件时,它将解析该文件,并为找到的每个节点创建一个实例
因此,假设在fxml文件中有一个Gauge
节点,带有fx:id=“gauge1”
,将其添加到控制器时:
@FXML private Gauge gauge1;
@FXML private Gauge gauge1;
fxmloader
将为您创建一个实例。然后可以设置如下值:
public void initialize() {
gauge1.setValue(30);
}
但当你这样做的时候:
@FXML private Gauge gauge1 = new Gauge();
实际情况是,您正在创建第二个实例:第一个实例是通过反射创建的,仅基于fx:id
标签,并通过fxmloader
添加到场景图中,而您创建的第二个实例从未添加到场景图中
稍后,您不知道要修改的实际实例是什么。执行打印输出时,可能正在访问两个对象,即列表中未添加到场景图的对象
因此解决方案很简单:不要创建第二个实例,只使用以下方法:
@FXML private Gauge gauge1;