afterburner.fx从节点获取视图

时间:2016-03-27 04:51:30

标签: javafx mvp

我一直试图掌握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());

这些不是第一视图,第二视图等。它是用于演示...

现在每个视图都有一个重载方法:

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

我已经为标签更改设置了一个监听器,以便我可以在视图进入视图后重新加载这些视图

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

一旦进入视图,如何重新加载标签的视图。?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我设法为此找到了解决方法。我创建了两个新类,一个扩展了FXMLView,另一个扩展了Tab。

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

抱歉,如果我的问题没有任何意义。我希望有人觉得这很有用。