在 2 类 之间传递一个全局 ObservableList

Passing a global ObservableList between 2 classes

我有一个问题。我如何在两个 classes 之间传递一个 ObservableList 的相同引用?我需要将我的 SimultanTestController 中的一个元素添加到 FXMLDocumentController 中的列表中。

我的代码(FXMLDocumentController):

public class FXMLDocumentController implements Initializable {   

    Stage primaryStage = new Stage();
    Stage options = new Stage();
    Stage selectTest = new Stage();

    ObservableList<DefaultTestInterface> items = FXCollections.observableArrayList();

        public ObservableList<DefaultTestInterface> getList() {
        return items;
        }

    @FXML
    private ListView ItemList;
    @FXML
    public Button btn_globalOptions;
    @FXML
    private Button btn_add;
    @FXML
    private Button btn_delete;
    @FXML
    private Button btn_moveUP;
    @FXML
    private Button btn_moveDOWN;

    public void getPrimaryStage(Stage stage){
        this.primaryStage=stage;
    }

我的代码(SimultanTestController):

public class SimultanTestController implements Initializable {

ObservableList<DefaultTestInterface> items = (new FXMLDocumentController()).getList();

@FXML
Button btn_ok;

    public void addTest(ActionEvent event){
           for( int x = 0 ; x < items.size() ; x++ ) { // start from index 0
        System.out.println("Item" +items.get(x));
           }
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
       btn_ok.setOnAction(this::addTest);
    }
}

所以你看,我有一个方法:getList

并且在 SimultanTestController 中调用了此方法,我尝试将 getList 的值解析为 SimultanTestController 中的 ObservableList。 之后,我想从 SimultanTestController 向 FXMLDocumentController 中的 ObservableList 添加一个元素。但是我在两个 classes 中都没有得到相同的列表 ...

感谢您的帮助!

我在这个 class 中加载我的 FXML-Files: 首先,我为 FXML-Files 创建了所有新阶段,并有 3 个带有 FXML-File-Names、window-titel 和所有阶段的 ObservableList。然后我用我的 for-loop 加载所有阶段。 (顺便说一句,这是一个很好的解决方案吗?)

我的window打开方式:Main-->SelectTest-->SimultanTest

public class SelectTestController 实现 Initializable {

ObservableList<String> items =FXCollections.observableArrayList();

Stage primaryStage = new Stage();
Stage simultan = new Stage();
Stage audioLoop = new Stage();
Stage cpu = new Stage();
Stage driversCD = new Stage();
Stage driversHD = new Stage();
Stage driversFD = new Stage();
Stage externalProgramm = new Stage();
Stage graphics = new Stage();
Stage interactive = new Stage();
Stage mainboard = new Stage();
Stage memorySPD = new Stage();
Stage memory = new Stage();
Stage network = new Stage();
Stage ports = new Stage();
Stage reboot = new Stage();
Stage signal = new Stage();
Stage userMessage = new Stage();

@FXML
private ListView lv_selectTest;
@FXML
private Button btn_choose;
@FXML
private Label test;

public void getPrimaryStage(Stage stage){
    this.primaryStage=stage;
}

ObservableList<Stage> stages =FXCollections.observableArrayList();
ObservableList<String> fxml =FXCollections.observableArrayList();
ObservableList<String> stageTitel =FXCollections.observableArrayList();

public void initWindows(){
    try {
        for(int i=0;i<=stages.size();i++){
        Window parent = primaryStage;
        Parent root = FXMLLoader.load(getClass().getResource(fxml.get(i)));
        Scene scene = new Scene(root);
        stages.get(i).initOwner(parent);
        stages.get(i).initModality(Modality.APPLICATION_MODAL);
        stages.get(i).setTitle(stageTitel.get(i));
        stages.get(i).setScene(scene);
        stages.get(i).setResizable(false);
        stages.get(i).setAlwaysOnTop(true);
        }
    }catch (IOException|IllegalStateException ex) {
        System.out.println(ex);
    }
}

我尝试获取 FXML-Loader 的控制器,这成功了。我从 JavaFX-Start 方法获取值并将其解析为 FXMLDocumentController。现在我的 FXMLDocumentConroller 中有一个带有控制器实例的 var。但我无法在 SimultanTest 中获取值,也无法向 ObservableList 项目添加一些内容。我厌倦了 new Instance() 和 setter+getter...我不知道为什么我不明白...

如果有人可以根据我的代码给我一个示例,那就太好了......你看我为我的解决方案工作但我没有进一步......

我找到了自己的问题解决方案。我没有得到 FXMLMain 的控制器,但我用存储 ObservableList 项目的 Singelton Class 解决了它。

现在我可以设置每个 class 的项目,并可以在 FXMLDocumentController 的 ListView 中显示它们。如果有人有同样的问题,联系我寻求解决方案。

感谢帮助@James_D