Доступ к компонентам пользовательского интерфейса из ЭКЗЕМПЛЯРА этапа в JavaFX

Я пишу программное обеспечение для заметок в javaFX, используя Scene Builder и Netbeans IDE.

Я хотел бы, чтобы пользователь мог открывать неограниченное количество окон (для заметок) (точно так же, как в приложении, таком как блокнот), а затем нажимать кнопку «сохранить все», которая затем будет считываться из текстовых полей в каждом из этих окон .

Моя текущая проблема заключается в доступе к этим текстовым областям.

В проекте есть два файла FXML, один из которых представляет собой общий шаблон для заметок (независимо от того, сколько пользователь хочет открыть).

Помощь будет очень признательна!

До сих пор мне удавалось без проблем запускать эти безграничные окна для создания заметок. У меня есть два класса контроллера с методом getText() в том, который соответствует FXMLTemplate (тот, который используется для самих заметок, а не для основного экрана).

Другой класс, который содержит код, относящийся к запуску (неограниченных) заметок, хранит каждую из новых стадий, созданных в глобальном массиве с именем «arrayOfStages». Меня также беспокоит, содержит ли массив этапов (ссылки) экземпляры самих этих этапов, а не копии одной и той же ссылки на статический класс шаблона). Так ли это? Если бы кто-то мог объяснить это для меня, это было бы здорово!

Я пытался пройти маршрут getText(), а также маршрут доступа к текстовой области, и до сих пор не удалось в обоих случаях (т.е. ссылка на этот конкретный экземпляр класса контроллера по сравнению с доступом к элементу пользовательского интерфейса из экземпляра этапа ( хранится в массиве)). У меня пока не получилось и то, и другое :(

Дайте мне знать, если код будет полезен, и я опубликую его здесь. Я был бы очень признателен за любую помощь, которую вы, ребята, можете предоставить!

:)

Итак, это раздел, отвечающий за запуск теоретически неограниченного количества окон блокнота:

public void newNote()
    {//intuntitlednotenumber
        //hold an global array of Stage objects (the note windows themselves), to access those stages
        
        try{
        Parent root = FXMLLoader.load(getClass().getResource("Template.fxml"));    
        Scene scene = new Scene(root);

        Stage aStage = new Stage();            
        aStage.setScene(scene);
        arrayOfStages.add(aStage);
        aStage.show();    
        }
        catch(Exception e)
        {
        
        }
        
        
        //array of "new notes" ie stages

    }
    
}

И это раздел, в котором я пытаюсь их сохранить (мне нужна помощь в ссылке на якорную панель, расположенную на сцене, предполагая, что сами экземпляры были сохранены в массиве (я надеюсь на это... но я не совсем уверен) , Часть, с которой я хотел бы помочь, находится здесь):

for(int i = 0; i < arrayOfStages.size(); i++)
            {
                try{
                AnchorPane frame = arrayOfStages.get(i).getScene().getRoot().get....//<--- I'm not really sure what to do here, or if this technique will really work...ie. get me the INSTANCE of the anchorpane from the INSTANCE of the stage, and in turn the textarea
                Node n = frame.getChildren().get(0);
                TextArea a = (TextArea) n;
                System.out.println(a.getText()); //this print statement is for testing purposes, later on, I will store the extracted text in a textfile
                }     
                catch(Exception e){System.out.println(e);}
                

Я не был действительно уверен, куда идти отсюда. На данный момент я перепробовал невероятное количество вещей, и я больше не могу отделять одно от другого: P

Является ли этот подход правильным или он ошибочен с точки зрения того, как работает создание экземпляров? Как буду обращаться к якорной панели, используя экземпляр сцены в массиве?


person user2058345    schedule 08.12.2016    source источник
comment
Не могли бы вы опубликовать stackoverflow.com/help/mcve, пожалуйста?   -  person Robert    schedule 09.12.2016
comment
Я думаю, все, что вам нужно, это текст в TextArea, когда пользователь пытается сохранить приложение, и он должен быть вам доступен :)   -  person ItachiUchiha    schedule 09.12.2016
comment
Да, это именно то, что я хочу... текст из переменного количества текстовых областей.... Я не уверен, как получить к ним доступ... Я только что обновил вопрос соответствующим кодом. :)   -  person user2058345    schedule 09.12.2016


Ответы (1)


Вот решение, если кому интересно:

Node node1 = arrayOfStages.get(i).getScene().getRoot();
AnchorPane ap = (AnchorPane) node1;
Node n =...

Остальное совпадает с кодом в вопросе.

person user2058345    schedule 12.12.2016