我有两个带有控制器的 *.fxml 表单。首先是 Window,其次是 ProductPane。
简化的 Window.fxml 是:
<BorderPane prefWidth="650.0" prefHeight="450.0" fx:controller="package.WindowController">
<center>
<TabPane fx:id="tabsPane">
<tabs>
<Tab fx:id="productsTab" text="Products"/>
<Tab fx:id="warehouseTab" text="Warehouse"/>
<Tab fx:id="saleTab" text="Sale"/>
</tabs>
</TabPane>
</center>
</BorderPane>
Window.fxml 的控制器:
public class WindowController {
@FXML
private TabPane tabsPane;
@FXML
private Tab productsTab;
@FXML
void initialize() {
sout("Main Window initialization...");
tabsPane.getSelectionModel().selectedIndexProperty().addListener((e, o, n) -> {
sout("Changed to " + n);
});
tabsPane.getSelectionModel().selectedItemProperty().addListener((e, o, n) -> {
sout("New item: " + n);
// Load ProductPane content:
if(n == productsTab) {
try {
Parent p = FXMLLoader.load(getClass().getResource("productPane.fxml"));
n.setContent(p);
} catch(IOException ex) {
ex.printStackTrace();
}
}
});
sout("Select first item...");
tabsPane.getSelectionModel().selectFirst();
// This methods also don't work
// tabsPane.getSelectionModel().clearAndSelect();
// tabsPane.getSelectionModel().select(productTab);
// tabsPane.getSelectionModel().select(0);
}
}
问题是:当我在 main() 中加载 Window.fxml 并启动它时,它会出现第一个选项卡为空的窗口。
调试输出:
Main Window initialization...
Select first item...
但是 ProductPane 没有加载并且监听器没有调用。如果我在 Window 中的选项卡之间切换,则会触发侦听器并正确加载产品选项卡。
有什么问题?