在 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
我有一个问题。我如何在两个 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