2015-01-25 2 views
-1

У меня вопрос. Как я могу передать одну ссылку одного 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 ... Я не знаю, почему я этого не понимаю ...

Было бы очень приятно, если бы кто-нибудь мог дать мне пример, основанный на моем коде ... Вы видите я работал над своим решением, но я не стал дальше ...

+0

Контроллеры создаются с помощью соответствующих 'FXMLLoader'. Создание вручную (как и для 'newFXMLDocumentController()' в вашем 'SimultanTestController') вам не подходит, так как вам действительно нужна ссылка на контроллер, созданный« FXMLLoader ». Какова связь между этими двумя контроллерами? Где загружаются соответствующие файлы FXML? –

+0

Я добавил дополнительную информацию для вас. Sry это мой первый вопрос о StackOverflow ... – Steinliiippp

+0

«У меня вопрос», «Вы видите, что я работал ..», «Спасибо за помощь», «Я не знаю, почему я этого не понимаю» все вопросы не имеют отношения к вопросу, который не принадлежит к вопросу (читайте в справочном туре, в котором четко не говорится о каких-либо отвлечениях, нет chit-chat. Удаление этих, помимо того, что сообщение легче читать, также будет иметь положительный побочный эффект сразу же количество орфографических ошибок в вашем сообщении – Anthon

ответ

1

Я нашел собственное решение для своей задачи. Я не получаю контроллер FXMLMain, но я решил его с помощью Singelton Class, в котором хранятся элементы ObservableList.

Теперь я могу установить элементы из каждого класса и показать их в ListView в FXMLDocumentController. Если у кого-то есть одна и та же проблема, подключите меня к решению.

Спасибо за помощь @ James_D

Смежные вопросы