2016-03-27 9 views
0

Ich habe versucht, den Zugriff auf afterburner.fx für ein paar Tage zu bekommen, aber ich kann nicht herausfinden, dieses Problem. bitte helfenafterburner.fx Ansicht von Knoten

drei Registerkarten in einem Registerbereich sind

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

diese Firstview nicht genannt, secondview usw. ist es für die Demonstration ...

jetzt jede dieser Ansichten, die einen Reload-Methode haben:

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

und ich habe Setup einen Listener für Änderungen Registerkarte, so dass ich diese Ansichten nachladen können, sobald sie in den Blick kommen

tabPane.getSelectionModel().selectedItemProperty().addListener((o, oldValue, newValue) -> { 
    newValue.getView().reload(); // of course this cant be done like this 
}) 

Wie wird die Ansicht der Registerkarte neu geladen, sobald sie angezeigt wird?

Antwort

1

Sie können Zuhörer auf die einzelnen Registerkarten hinzufügen, anstatt auf die Tabfeld:

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

Ich habe es geschafft, eine Arbeit dafür zu finden. Ich habe zwei neue Klassen erstellt, eine die FXMLView erweitert und eine die Tab erweitert.

public abstract class ReloadableView extends FXMLView { 

    public abstract void reload(); 

} 

und

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; 
    } 

} 

und schließlich hinzugefügt, um den Hörer

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

leid, wenn meine Frage keinen Sinn abgepfiffen. Ich hoffe, dass jemand das nützlich findet.