【发布时间】:2021-08-12 03:41:55
【问题描述】:
@Override
public void start(Stage stage) throws Exception {
BorderPane root = FXMLLoader.load(getClass().getClassLoader().getResource("mainView.fxml"));
当我运行它时,它不会显示注入的视图
我正在使用 JavaFX 为主页构建一个新应用程序,我使用由 3 个 fxml 文件构建的 3 个视图 每个视图都有它的控制器。对于主页,我想通过 fx:include 将三个 fxml 文件注入 mainView.fxml 中,mainView.fxml 还有一个控制器,我该怎么做?
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.text.Font?>
<fx:root alignment="CENTER_LEFT" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="93.0" prefWidth="600.0" style="-fx-min-width: 800; -fx-min-height: 100; -fx-spacing: 30;" type="javafx.scene.layout.HBox" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label fx:id="title" alignment="CENTER" prefHeight="91.0" prefWidth="179.0" style="-fx-label-padding: 20; -fx-line-spacing: 20;" text="News" textFill="#00a4f2">
<font>
<Font name="Arial Black" size="36.0" />
</font>
<opaqueInsets>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
</opaqueInsets></Label>
<Button fx:id="refresh" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" style="-fx-alignment: CENTER; -fx-background-color: #66a6ff;" text="Button" textAlignment="CENTER">
<opaqueInsets>
<Insets bottom="30.0" left="30.0" right="30.0" top="30.0" />
</opaqueInsets></Button>
<Button fx:id="stat" alignment="CENTER" mnemonicParsing="false" style="-fx-background-color: #feada6;" text="Button">
<opaqueInsets>
<Insets bottom="30.0" left="30.0" right="30.0" top="30.0" />
</opaqueInsets></Button>
</children>
</fx:root>
这是每个示例的 topView.fxml
package ch.bfh.spacenews;
import java.io.IOException;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
public class TopBarController extends HBox {
@FXML
public Label title;
@FXML
public Button refresh;
@FXML
public Button stat;
TopBarController(){
FXMLLoader load = new FXMLLoader(getClass().getClassLoader().getResource("topView.fxml"));
load.setRoot(this);
load.setController(this);
try {
System.out.println("TopBarController");
load.load();
}catch(IOException e) {
e.printStackTrace();
}
}
}
这是topView.fxml对应的控制器
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.*?>
<BorderPane fx:controller="ch.bfh.spacenews.mainController" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1">
<top>
<fx:include fx:id="topBar" source="topView.fxml"/>
</top>
<center>
<fx:include fx:id="article" source="sample.fxml"/>
</center>
<right>
<fx:include fx:id="seacrh" source="searchView.fxml"/>
</right>
</BorderPane>
这是我要注入 topView.fxml 的地方
package ch.bfh.spacenews;
import javafx.fxml.FXML;
public class mainController {
@FXML
TopBarController topBarController;
@FXML
ArticleController articleController;
@FXML
SearchController searchController;
@FXML
public void initialize() {
}
}
这是我要注入 topView.fxml 的 mainView.fxml 的控制器
【问题讨论】:
-
*.com/questions/44807580/… 会为您回答这个问题吗?
-
好吧,我很想尝试同样的事情,但我只是想展示我在 mainView.fxml 中创建的三个不同的视图,但是当我加载 mainView.fxml 时它不会发生
-
minimal reproducible example 请 .. 遵守 java 命名约定
-
@WillHartung 这个例子实际上是不同的; FXML 自定义组件模式 (openjfx.io/javadoc/15/javafx.fxml/javafx/fxml/doc-files/…) 依赖于自定义节点子类;它不使用
<fx:include>。
标签: java user-interface javafx fxml