2016-03-27 9 views
0

私は数日後にafterburner.fxの把握を試みてきましたが、この問題を理解することはできません。これらの各ビューは、リロードメソッドを持っている今afterburner.fxノードからビューを取得

tabPane.getTabs().get(0).setContent(new FirstView().getView()); 
tabPane.getTabs().get(1).setContent(new SecondView().getView()); 
tabPane.getTabs().get(2).setContent(new ThirdView().getView()); 

これらはsecondviewなど、それはデモンストレーションのためだ、firstview命名されていません...

タブペインの3つのタブがあり

助けてください。

firstView.reload() 
secondView.reload() 
thirdView.reload() 

と、彼らはビュー

に来たら、私はこれらのビューを再ロードできるように、私はセットアップタブの変更のリスナーを持っています
tabPane.getSelectionModel().selectedItemProperty().addListener((o, oldValue, newValue) -> { 
    newValue.getView().reload(); // of course this cant be done like this 
}) 

表示されたタブの表示を再読み込みする方法。

答えて

1

あなたは、個々のタブに代わりのタブペインにリスナーを追加することができます。

FirstView firstView = new FirstView(); 
Tab tab0 = tabs.getTabs().get(0); 
tab0.selectedProperty().addListener((obs, wasSelected, isSelected) -> { 
    if (isSelected) { 
     firstView.reload(); 
    } 
}); 
tab0.setContent(firstView.getView()); 

// etc 
0

私はこれを回避する方法を見つけることができました。私は2つの新しいクラスを作成しました。一つはFXMLViewを拡張し、もう一つはTabを拡張します。私の質問は、任意の意味をなさないdidntの場合

public abstract class ReloadableView extends FXMLView { 

    public abstract void reload(); 

} 

public class ReloadingTab<V extends ReloadableView> extends Tab { 

    private V view; 

    public ReloadingTab(String text, V view) { 
     super(text, view.getView()); 
     this.view = view; 
    } 

    public V getView() { 
     return view; 
    } 

} 

、最終的には

tabPane.getSelectionModel().selectedItemProperty().addListener((o, oldValue, newValue) -> { 
     ReloadingTab tab = (ReloadingTab) newValue; 
     tab.getView().reload(); 
    }); 

ごめんリスナーを追加しました。私は誰かがこれが有用であると願っています。

関連する問題