java - 使用另一个控制器将 fxml 页面添加到 BorderPane 中心区域
问题描述
我正在使用 javafx 构建一个 GUI,但我面临这个问题。有两个控制器和一个 MasterPanel (BorderPane) 1. MainController :它显示初始 GUI,单击主菜单后,它会将子菜单添加到 BorderPane 的左窗格(例如,子菜单使用 DashboardController 作为仪表板菜单。) 2. 当我单击在子菜单上,即 letf 手边的通知,然后 Birthday.fxml 应该添加到主面板中心区域(它使用 DashboardController 在中心添加页面)。
问题:当我添加 Birthday.fxml 时没有显示错误,但它没有显示在屏幕上。在此处输入图像描述
主控制器
package application;
import java.io.IOException;
import java.net.URL;
import java.util.Locale;
import java.util.ResourceBundle;
import admin.UserDetail;
import dashboard.DashBoardController;
import javafx.event.Event;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Region;
import javafx.stage.Stage;
import login.LoginModel;
import utility.ErrorLog;
import utility.Message;
import utility.Transition;
public class MainController implements Initializable {
@FXML ImageView logo;
@FXML Button dashbord;
@FXML Button admin;
@FXML Button trans;
@FXML Button report;
@FXML Label sessionId;
@FXML Label userId;
@FXML Label server;
@FXML Button logout;
@FXML BorderPane masterPanel;
@Override
public void initialize(URL location, ResourceBundle resources) {
// TODO Auto-generated method stub
//DashBoard Image Setup
Image dashBoardImg = new Image(getClass().getResourceAsStream("/Images/dashBoard.png"));
ImageView dashView = new ImageView(dashBoardImg);
dashView.setFitHeight(25);
dashView.setFitWidth(25);
dashbord.setGraphic(dashView);
// Admin Image Setup
Image adminImg = new Image(getClass().getResourceAsStream("/Images/admin.png"));
ImageView adminView = new ImageView(adminImg);
adminView.setFitHeight(25);
adminView.setFitWidth(25);
admin.setGraphic(adminView);
// Transaction Image Setup
Image transImg = new Image(getClass().getResourceAsStream("/Images/transaction.png"));
ImageView transView = new ImageView(transImg);
transView.setFitHeight(25);
transView.setFitWidth(25);
trans.setGraphic(transView);
// Report Image Setup
Image reportImg = new Image(getClass().getResourceAsStream("/Images/report.png"));
ImageView reportView = new ImageView(reportImg);
reportView.setFitHeight(25);
reportView.setFitWidth(25);
report.setGraphic(reportView);
// Loout Image Setup
Image logoutImg = new Image(getClass().getResourceAsStream("/Images/Logout.png"));
ImageView logoutView = new ImageView(logoutImg);
logoutView.setFitHeight(25);
logoutView.setFitWidth(25);
logout.setGraphic(logoutView);
//Company Logo Setup
Image logoImg = new Image(getClass().getResourceAsStream("/Images/Cdl_Logo.png"));
logo.setImage(logoImg);
sessionId.setText(String.valueOf(UserDetail.getSessionId()));
userId.setText(UserDetail.getUserId());
server.setText(UserDetail.getServer());
}
public void logOut() {
if(new LoginModel().logOut()) {
try {
Parent pane = FXMLLoader.load(getClass().getResource("/login/Login.fxml"));
Scene scene = new Scene(pane);
scene.getStylesheets().add(getClass().getResource("/application/style.css").toExternalForm());
Stage stage = (Stage)logout.getScene().getWindow();
stage.setScene(scene);
stage.setMaximized(false);
new Transition().fadeOut(pane);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
ErrorLog.ErrorLog(e);
Message.ErrorMsg(e.getMessage());
}
}
}
public void loadMenu(Event event) {
try {
Object src = event.getSource();
URL path = null;
if (src.equals(dashbord))
path = getClass().getResource("/dashboard/DashboardMenu.fxml");
else if (src.equals(admin))
path = getClass().getResource("/admin/AdminMenu.fxml");
else if (src.equals(trans))
path = getClass().getResource("/transaction/TransactionMenu.fxml");
else if (src.equals(report))
path = getClass().getResource("/report/ReportMenu.fxml");
masterPanel.setLeft(FXMLLoader.load(path));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
ErrorLog.ErrorLog(e);
}
}
public BorderPane getPane() {
return masterPanel;
}
}
- 仪表板控制器
package dashboard;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import application.MainController;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
public class DashBoardController implements Initializable {
@FXML TreeView<String> menu;
public static int count = 0;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
// TODO Auto-generated method stub
TreeItem<String> dashBoard = new TreeItem<String>("DASHBOARD",new ImageView(new Image(getClass().getResourceAsStream("/Images/dashBoard.png"),50,50,false,true)));
dashBoard.setExpanded(true);
TreeItem<String> notification = new TreeItem<String>("NOTIFICATION");
TreeItem<String> birthdayNoftify = new TreeItem<String>("BIRTHDAY");
TreeItem<String> retireNoftify = new TreeItem<String>("RETIREMENT");
notification.getChildren().addAll(birthdayNoftify,retireNoftify);
notification.setExpanded(true);
dashBoard.getChildren().add(notification);
System.out.println(count++ +" " +System.currentTimeMillis()+" "+menu);
menu.setRoot(dashBoard);
}
public void Action() {
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/application/Main.fxml"));
AnchorPane p = fxmlLoader.load();
MainController mc = (MainController) fxmlLoader.getController();
BorderPane pane = mc.getPane();
pane.setCenter(FXMLLoader.load(getClass().getResource("/dashboard/Birthday.fxml")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
解决方案
推荐阅读
- java - Spring Boot中的并发计划方法
- java - 具有不同类型表达式的三元运算符
- android - FFmpeg drawtext-Filter 的字体文件放在哪里?
- excel - 在值等于 Yes 的工作表中使用 VLOOKUP 进行条件格式设置
- vuejs2 - Vuejs + VeeValidate 将参数传递给子组件
- javascript - 如何部署第三方 VueJS 组件?
- java - 错误:无法解析 POM - Linux
- javascript - 反应 - 使用方法进行造型是一种很好的做法
- python - 使用 Python 从 Oracle 读取大量数据作为数据帧的最快方法
- javascript - 在 JSF 页面中使用 Javascript 调用远程命令设置空值