首页 > 解决方案 > JavaFX - 从控制器 2 传递到控制器 1 的变量在使用 System.out 检查时正确更新,但结果在标签字段中未更新

问题描述

我已经研究这个话题好几天了,但找不到能解决我的查询的答案,所以这里是 - 我的第一个 StackOverflow 问题。体贴!

我有一个带有侧边菜单和 BorderPane 类型主窗格的应用程序。在这个主窗格中是 TableView1。此窗格的内容是控制器 1的一部分,称为“检查表”。当我在 TableView1 中选择一个项目并单击一个按钮时,会弹出一个新窗口,其中包含另一个表 (TableView2),我可以在其中添加数据。此窗口的内容是控制器 2的一部分,称为“表 2”。

控制器 1中,我有许多标签,当我关闭控制器 2窗口并将相关数据添加到 TableView2 时,它们应该会自动更新。为此,我已按照将控制器 2中更新的变量传递给控制器​​ 1的说明进行操作,一切似乎都井然有序。我还在控制器 1的 setLabel 方法中编写了一个“System.out.println”,以确认变量是否已传递给控制器​​ 1并位于标签字段中 - 是的,它已被传递。它似乎在那里。但是在 UI 本身中,标签字段没有更新。

似乎不知何故 UI 没有刷新,但位于它后面的代码本身是有序的。所有 fx:id 值都已分配,所有 fx:controller 值也在 FXML 文件中分配。

这是控制器 2 'Table2' 中调用更新控制器 1 ' checksheet' 中标签的方法

String data1 = Double.toString(lengthTD);               
            FXMLLoader loader = new FXMLLoader(getClass().getResource("CheckSheetUI.fxml"));
            AnchorPane mainPane  = (AnchorPane) loader.load();
            Checksheet cs = loader.getController();             
            cs.setLabel2(data1);

这是控制器 1 'checksheet'中的设置器

public void setLabel2(String data2) {
totalToDateBox.setText(data2);
System.out.println(totalToDateBox.getText()); // this does return the correct value in the console }

关于为什么 UI“ChecksSheetUI.fxml”中的标签没有更新的任何想法?我觉得这与处理边框窗格有关,因为我在其他地方遵循了代码,但这似乎不起作用。

顺便说一句(如果相关),我有一个总体控制器,用于调整主窗格中包含的内容(因为我有几个链接的不相关的 FXML 文件)。

public class FXMLDocumentController extends Main {

@FXML
public BorderPane mainPane;

@FXML
private Button btn_dmg27, btn_staySafe, btn_checkSheet;

@FXML
private void buttonAction(ActionEvent event) throws IOException {

    if(event.getSource() == btn_dmg27) 
    {
        Parent parent1 = FXMLLoader.load(getClass().getResource("dmg27UI.fxml"));           
        mainPane.setCenter(parent1);

    }
    else if(event.getSource() == btn_staySafe) 
    {
        Parent parent1 = FXMLLoader.load(getClass().getResource("staySafeUI.fxml"));            
        mainPane.setCenter(parent1);        

    }
    else if(event.getSource() == btn_checkSheet) 
    {
        Parent parent1 = FXMLLoader.load(getClass().getResource("CheckSheetUI.fxml"));          
        mainPane.setCenter(parent1);        
    } }

标签: javajavafxcontroller

解决方案


尝试在 scenebuilder 的标签上输入一些文本来测试标签的属性。


推荐阅读