我一直试图掌握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
})
一旦进入视图,如何重新加载标签的视图。?
答案 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();
});
抱歉,如果我的问题没有任何意义。我希望有人觉得这很有用。