第一个控制器中第二个控制器的访问方法和标签

问题描述

设计 我有 2 个控制器类。第一个控制器是加载 tableview 和其他数据的主控制器类。有一个 HBox,它在主控制器中加载第二个控制器(第二个控制器包含一个 MigPane、一行、一个按钮),它根据文件数据形成层次结构。第二个控制器可以根据文件数据多次添加到HBox区域。

目标 我希望在主控制器中检索第二个控制器的 MigPane 的 ID。由于我正在构建层次结构,每个第二个控制器的按钮事件都会在与 MigPane 的 ID 匹配后填充 tableview 中的数据。

我已经查看了 StackOverFlow 的许多帖子,但我仍然不明白我在哪里犯了错误

主控制器

public class Controller implements Initializable
{
    ObservableList<SubSystem> s = FXCollections.observableArrayList();
    @FXML private TableView<SubSystem> SubsystemTable;
    @FXML private TableColumn<SubSystem,String> SubsystemParameters;
    @FXML private TableColumn<SubSystem,String> SubsystemDesc;
    @FXML private TableColumn<SubSystem,String> SubsystemValue;
    @FXML private TableColumn<SubSystem,String> Subsystemunit;

    public void initialize(URL location,ResourceBundle resources) 
    {
        SubsystemParameters.setCellValueFactory(new PropertyValueFactory<SubSystem,String>("Parameter1"));
        SubsystemDesc.setCellValueFactory(new PropertyValueFactory<SubSystem,String>("Desc1"));
        SubsystemValue.setCellValueFactory(new PropertyValueFactory<SubSystem,String>("Value1"));
        Subsystemunit.setCellValueFactory(new PropertyValueFactory<SubSystem,String>("Unit1"));
    }

    public void getSubsystemClicked() throws IOException
    {
        try
        {
            SubsystemTable.setItems(getSub());
        }
        catch (IOException e2)
        {
            e2.printstacktrace();
        }
    }

    public ObservableList<SubSystem> getSub() throws IOException
    {
        s.add(new SubSystem("A","B","C","D"));
        return s;
    }

    public void addNodeButton() 
    {
        subsystem = new FXMLLoader(getClass().getResource("SubsystemNode.fxml"));
        try 
        {
           node = subsystem.load();
        } 
        catch (IOException e) 
        {
           e.printstacktrace();
        }
    }
}

第二控制器:

public class SubsystemNodeController implements Initializable
{
    @FXML public MigPane subsystemMigPane;
    @FXML public Button subsystem;
    @FXML public ImageView SubSystemImageView;
    private Controller MainController;
    
    public void initialize(URL url,ResourceBundle rb) 
    {
        subsystem.setonAction(event-> setMigPane());
    }  
    
    public void setMigPane()
    {
        System.out.println("Subsystem Node Controller : " + subsystemMigPane.getId());
        System.out.println("Button ID generated is: " + subsystem.getId());
    }
    
    public String getMigPane()
    {
        System.out.println("Subsystem Node Controller called in Controller : " + subsystemMigPane.getId());
        return subsystemMigPane.getId();
    }
}

子系统表类

public class SubSystem 
{
    protected SimpleStringProperty parameter1;
    protected SimpleStringProperty desc1;
    protected SimpleStringProperty value1;
    protected SimpleStringProperty unit1;
    
    public SubSystem(String parameter,String desc,String value,String unit) 
    {
        super();
        this.parameter1 = new SimpleStringProperty(parameter);
        this.desc1 = new SimpleStringProperty(desc);
        this.value1 = new SimpleStringProperty(value) ;
        this.unit1 = new SimpleStringProperty(unit);
    }
    
    public String getParameter1() 
    {
        return parameter1.get();
    }
    public void setParameter1(String p)
    {
        this.parameter1 = new SimpleStringProperty(p);
    }

    public String getDesc1() 
    {
        return desc1.get();
    }
    public void setDesc1(String d)
    {
        this.desc1 = new SimpleStringProperty(d);
    }

    public String getValue1() 
    {
        return value1.get();
    }
    public void setValue1(String v)
    {
        this.value1 = new SimpleStringProperty(v);
    }

    public String getUnit1() 
    {
        return unit1.get();
    }
    public void setUnit1(String u)
    {
        this.unit1 = new SimpleStringProperty(u);
    }
}

注意 我尝试在主控制器中创建一个简单的时间函数并将其传递给第二个控制器。它运行良好并正确显示时间。但是当我尝试调用主控制器中的第二个控制器获取ID时,它不起作用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)