2016-12-08 10 views
1

私は、シーンビルダとNetbeans IDEを使用して、javaFXにnotetakerソフトウェアを作成しています。JavaFXのステージのインスタンスからUIコンポーネントにアクセスする

(メモ帳のようなアプリケーションのように)無制限のウィンドウを開くことができるようにしたいのですが、「すべて保存」ボタンを押してから、テキストエリアから読み込みますそれぞれのウィンドウ。

私の現在の問題は、それらのテキストエリアにアクセスすることです。

プロジェクトには2つのFXMLファイルがありますが、そのうちの1つはノートの一般的なテンプレートです(多くの場合、ユーザーが選択します)。

ヘルプは本当にありがとう!

これまでのところ、無制限のノートウィンドウは問題なく起動できました。私はFXMLTemplateに対応するgetText()メソッドを持つ2つのコントローラクラスを持っています(メインスクリーンではなく、ノートそのものに使用されています)。

(無制限)ノートの起動に関連するコードを含むもう1つのクラスには、「arrayOfStages」というグローバルアーリーリストに作成された新しいステージがそれぞれ格納されます。私はまた、ステージのアーラリストに、ステージそのもののインスタンス(インスタンスへの参照)が含まれているのか、静的テンプレートクラスと同じリファレンスのコピーが含まれているのかについて懸念しています。これは本当ですか?誰かが私のためにこれを明確にすることができれば、それは素晴らしいことでしょう!

私はgetText()ルートだけでなく、アクセスするテキストエリアのルートに行ってみましたが、これまで両方で失敗しました(つまり、コントローラクラスの特定のインスタンスを参照して、ステージの(アレイに格納されている))。私はこれまでのところ、両方で失敗した:(

を私は君たちを提供することができます任意の助けを本当に感謝します。コードが参考になると私はそれをここに投稿しますならば、私に教えてください!

を:)

だから、これはNoteTakerの窓の理論的には無限の数を起動するための責任のセクションです:

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

このアプローチは正しいのですか、インスタンス化の仕方に欠陥がありますか? どのように私は配列のステージのインスタンスを使用してアンカーパネルを参照するつもりですか?ここで

+1

https://stackoverflow.com/help/mcveを送信できますか? – Robert

+0

私はあなたが望むのは、ユーザーがアプリケーションを保存しようとしているときにTextAreaのテキストであり、それが利用可能でなければならないと思います:) – ItachiUchiha

+0

ええ、まさに私が望むのは...可変数のテキストエリアからのテキスト。 ...これらにアクセスする方法がわかりません...関連するコードで質問を更新しました。:) – user2058345

答えて

2

は、ケースには誰もが興味を持って解決策があります:

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

残りは問題のコードと同じです。

関連する問題