2017-04-24 4 views
0

私はHierarchyTabControllerを持っていますが、これはアプリケーションの初期ロード時に一度このメソッドを呼び出します。新しいデータが他のコントローラに追加されたら、コントローラを更新するにはどうすればいいですか?

public void displayRootTreeStructure() 
{ 
    //for loops through each Requirement to display all RequirementGroups 
} 

問題は、ユーザーがボタンをクリックして追加できるメソッドを持つRequirementGroupsControllerという別のコントローラがあります。

@FXML 
    private void addRequirementGroup() 
    { 
    } 

ユーザーが要件グループを追加し、階層]タブに切り替えあれば、他の言葉で、それが古くなっています。ユーザーがaddRequirementGroupを呼び出すときにdisplayRootTreeStructureメソッドを呼び出すにはどうすればよいですか? 2つの方法が別々のクラスであると仮定

+0

モデルクラスが必要で、そのクラスのインスタンスを各コントローラと共有する必要があるようです。コントローラはモデルを観察し、データが変更されたときに必要に応じてUIを更新することができます。 (これはMVCのようなデザインパターンの本質です。)パターンの例はhttp://stackoverflow.com/questions/32342864/applying-mvc-with-javafxをご覧ください。 –

+0

問題は、1つのコントローラだけがデータを変更していることです。他のコントローラはデータを表示しているだけです。 – Jay266

+0

正確に。 2つのコントローラ間でモデルインスタンスを共有します。データを表示するコントローラは、モデル内のデータを観察し、必要に応じてUIを更新することができます。データを変更するコントローラーはこれらのデータを変更し、他のコントローラーはそれを自動的に更新します。ツリーのモデルは、私がリンクしている例の単純なモデルよりも複雑かもしれませんが、構造的アイデアは同じです。 –

答えて

0

(あなたが指定されていませんでした):

がaddRequirementGroupクラスにdisplayRootTreeStructureクラスの参照を渡します。

DisplayRootTreeStructureClass ref = YOUR_REFERENCE_TO_THE_OBJECT; 
@FXML 
    private void addRequirementGroup() 
    { 
    ref.displayRootTreeStructure(); 
    } 

また、displayRootTreeStructureを静的にして、クラスから直接アクセスすることもできます。しかし、James_Dが述べたように、この経路をとるときに発生する可能性のある合併症に注意してください。

public class DisplayRootTreeStructureClass{ 

    public static void displayRootTreeStructure(){ 
    //do stuff 
    } 
} 

、あなたが直接、クラス名から呼び出すことによってそれにアクセスするには、何のオブジェクトは必要ありません:

@FXML 
    private void addRequirementGroup() 
    { 
    DisplayRootTreeStructureClass.displayRootTreeStructure(); 
    } 

あなたは、あなたの質問に詳細を与える試してみてください。あなたの質問に完全に答えるのがずっと簡単です。これを書いている時点では、あなたが十分な詳細を与えなかったので、これが正解かどうかは分かりません。

+0

メソッドを静的にしないでください。同じアプリケーションで2つのツリーを表示したい場合はどうなりますか? (あなたの上司が6か月以内にその機能を追加するように頼んだ場合はどうでしょうか?メソッドを静的にした場合は、新しい機能に対応するためにアプリケーションの大きなチャンクを書き直す必要があります) –

+0

" "。ああ、ただしないでください。 'static'キーワードはスコープに関するものであり、メソッドが静的であるかどうかの決定は、適切なスコープが何であるかに応じて行われるべきです。このメソッドは、このクラスの特定の*インスタンス*のプロパティである何かを変更しています:特定のビューに関連付けられているコントローラオブジェクト。クラス全体のプロパティではなく、コントローラインスタンスのプロパティです。このメソッドを静的にするのは間違っています。 –

関連する問題