У меня вопрос. Как я могу передать одну ссылку одного 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 в ObservableList в SimultanTestController. После этого я хочу добавить элемент в ObservableList в FXMLDocumentController из SimultanTestController. Но я не получаю тот же список в обоих классах ...
Благодарим за помощь!
Я загружаю свои FXML-файлы в этом классе: Сначала я создаю все новые этапы для своих FXML-файлов и имею 3 ObservableList с именами FXML-файлов, типом окна и всеми этапами. Затем я загружаю все этапы с помощью цикла for. (Кстати, это хорошее решение?)
Мое окно открытия путь: Главная -> SelectTest -> SimultanTest
общественного класса 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. Теперь у меня есть var с экземпляром контроллера в моем FXMLDocumentConroller. Но я не могу получить значение в SimultanTest или что-то добавить к элементам ObservableList. Я устал от нового экземпляра() и setter + getter ... Я не знаю, почему я этого не понимаю ...
Было бы очень приятно, если бы кто-нибудь мог дать мне пример, основанный на моем коде ... Вы видите я работал над своим решением, но я не стал дальше ...
Контроллеры создаются с помощью соответствующих 'FXMLLoader'. Создание вручную (как и для 'newFXMLDocumentController()' в вашем 'SimultanTestController') вам не подходит, так как вам действительно нужна ссылка на контроллер, созданный« FXMLLoader ». Какова связь между этими двумя контроллерами? Где загружаются соответствующие файлы FXML? –
Я добавил дополнительную информацию для вас. Sry это мой первый вопрос о StackOverflow ... – Steinliiippp
«У меня вопрос», «Вы видите, что я работал ..», «Спасибо за помощь», «Я не знаю, почему я этого не понимаю» все вопросы не имеют отношения к вопросу, который не принадлежит к вопросу (читайте в справочном туре, в котором четко не говорится о каких-либо отвлечениях, нет chit-chat. Удаление этих, помимо того, что сообщение легче читать, также будет иметь положительный побочный эффект сразу же количество орфографических ошибок в вашем сообщении – Anthon