我有一个问题。如何在两个类之间传递一个ObservableList的相同引用?我需要将我的SimultanTestController中的Element添加到FXMLDocumentController中的List。
我的代码(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添加一个元素。但我在两个班级都没有相同的名单...
谢谢你的帮助!
我在这个类中加载我的FXML文件: 首先,我为我的FXML文件创建所有新阶段,并有3个带有FXML文件名的ObservableList,窗口标题和所有阶段。然后我用for-loop加载所有阶段。 (顺便说一句,这是一个很好的解决方案吗?)
我的窗口开启方式:主要 - &gt; SelectTest - &gt; 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项添加内容。我厌倦了新的Instance()和setter + getter ......我不知道为什么我不明白......
如果有人能根据我的代码给我一个例子,那将是非常好的...你看我为我的解决方案工作但我没有进一步......
答案 0 :(得分:1)
我为我的问题找到了一个自己的解决方案。我没有得到FXMLMain的控制器,但我用一个存储ObservableList项的Singelton类解决了它。
现在我可以设置每个类的Items,并可以在FXMLDocumentController的ListView中显示它们。如果某人有同样的问题,请联系我寻求解决方案。
感谢您帮助@ James_D