Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在两个类之间传递全局ObservableList_Java_Javafx - Fatal编程技术网

Java 在两个类之间传递全局ObservableList

Java 在两个类之间传递全局ObservableList,java,javafx,Java,Javafx,我有个问题。如何在两个类之间传递同一个ObservableList的引用?我需要将SimultantTestController中的一个元素添加到FXMLDocumentController的列表中 我的代码(FXMLDocumentController): 公共类FXMLDocumentController实现可初始化{ 阶段primaryStage=新阶段(); 阶段选项=新阶段(); 阶段选择测试=新阶段(); ObservableList items=FXCollections.obse

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

我的代码(FXMLDocumentController):

公共类FXMLDocumentController实现可初始化{
阶段primaryStage=新阶段();
阶段选项=新阶段();
阶段选择测试=新阶段();
ObservableList items=FXCollections.observableArrayList();
公共可观察列表getList(){
退货项目;
}
@FXML
私有ListView项目列表;
@FXML
公共按钮btn_全局选项;
@FXML
私人按钮btn_添加;
@FXML
私人按钮btn_删除;
@FXML
专用按钮btn_向上移动;
@FXML
专用按钮btn_下移;
公共无效getPrimaryStage(阶段){
这个。初级阶段=阶段;
}
我的代码(SimultanTestController):

公共类SimultantTestController实现可初始化{
ObservableList items=(新的FXMLDocumentController()).getList();
@FXML
按钮btn_ok;
公共无效添加测试(ActionEvent事件){
对于(intx=0;x
所以你看,我有一个方法:getList

这个方法在SimultanTestController中调用,我尝试将getList的值解析为SimultanTestController中的ObservableList。 之后,我想从SimultantTestController向FXMLDocumentController中的ObservableList添加一个元素

谢谢你的帮助

我在此类中加载FXML文件: 首先,我为我的FXML文件创建了所有新的阶段,并有3个带有FXML文件名、窗口标题和所有阶段的ObservableList。然后,我用for循环加载所有阶段。(顺便问一下,这是一个好的解决方案吗?)

我的窗口打开方式:主-->选择测试-->同时测试

公共类SelectTestController实现可初始化{

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);
    }
}
observeList items=FXCollections.observearraylist();
阶段primaryStage=新阶段();
阶段模拟=新阶段();
Stage audioLoop=新Stage();
阶段cpu=新阶段();
阶段驱动器CD=新阶段();
阶段驱动器SHD=新阶段();
阶段驱动器fd=新阶段();
Stage externalprogram=新Stage();
阶段图形=新阶段();
舞台互动=新舞台();
后台主板=新后台();
阶段记忆PD=新阶段();
阶段存储器=新阶段();
舞台网络=新舞台();
阶段端口=新阶段();
阶段重新启动=新阶段();
阶段信号=新阶段();
Stage userMessage=new Stage();
@FXML
私有ListView lv_selectTest;
@FXML
私人按钮btn_选择;
@FXML
自有标签测试;
公共无效getPrimaryStage(阶段){
这个。初级阶段=阶段;
}
ObservableList stages=FXCollections.observableArrayList();
ObservableList fxml=FXCollections.observableArrayList();
ObservableList stageTitel=FXCollections.observableArrayList();
公共窗口(){
试一试{

对于(int i=0;i我为我的问题找到了自己的解决方案。我没有得到FXMLMain的控制器,但我用一个存储ObservableList项的Singleton类解决了它

现在我可以设置每个类中的项目,并可以在FXMLDocumentController的ListView中显示它们。如果有人有相同的问题,请与我联系以获得解决方案


感谢@James_D

的帮助,这些控制器是由各自的
fxmloader
s创建的。手动创建一个(就像您在
SimultanTestController
中使用
newFXMLDocumentController()
一样)对您没有用,因为您确实需要引用由
FXMLLoader
创建的控制器。这两个控制器之间的关系是什么?它们对应的FXML文件加载在哪里?我为您添加了其他信息。这是我关于StackOverflow的第一个问题…“我有一个问题”,“您看到我工作了…”“谢谢你的帮助”,“我不知道为什么我不明白”都是问题中不相关的绒毛,不属于一个问题(阅读帮助教程,它清楚地说明了不要分心,不要闲聊。删除这些内容,除了使文章更易于阅读外,还会产生积极的副作用,可以立即减少文章中的拼写错误
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);
    }
}
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);
    }
}