JavaFX同时具有多个控制器
我正在开发一个JavaFX应用程序,在制作应用程序的“仪表板”时遇到了以下问题。该申请的结构如下: 这是主控制器的菜单或“仪表板”。我遇到的问题是能否将命令从“控制面板”发送到主视图 appFrame和controlPanel的fx:id是显示这些视图的位置。如何让这两个面板(每个面板都有自己的控制器)进行通信JavaFX同时具有多个控制器,java,javafx,Java,Javafx,我正在开发一个JavaFX应用程序,在制作应用程序的“仪表板”时遇到了以下问题。该申请的结构如下: 这是主控制器的菜单或“仪表板”。我遇到的问题是能否将命令从“控制面板”发送到主视图 appFrame和controlPanel的fx:id是显示这些视图的位置。如何让这两个面板(每个面板都有自己的控制器)进行通信 <?xml version="1.0" encoding="UTF-8"?> <?import javafx.geometry.Insets?> <?im
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.Cursor?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.effect.DropShadow?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<AnchorPane fx:id="parent" prefHeight="600" prefWidth="1024.0" styleClass="parent" stylesheets="@stylesheet.css" xmlns="http://javafx.com/javafx/" xmlns:fx="http://javafx.com/fxml/" fx:controller="main.DashboardController">
<VBox alignment="TOP_CENTER" prefHeight="600.0" prefWidth="300.0" styleClass="sidebar">
<Pane prefHeight="75.0" prefWidth="300.0" style="-fx-background-color: #AED6F1#AED6F1;">
<padding>
<Insets left="10.0" />
</padding>
<ImageView fitHeight="75.0" fitWidth="236.0" layoutX="24.0" layoutY="8.0" pickOnBounds="true" preserveRatio="true">
<Image url="main/logo.png" /></ImageView>
</Pane>
<HBox id="projects" alignment="CENTER_LEFT" layoutX="10.0" layoutY="132.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onMouseClicked="#handleViewChanged" prefHeight="40.0" prefWidth="300.0" styleClass="btns">
<padding>
<Insets left="10.0" />
</padding>
<cursor>
<Cursor fx:constant="HAND" />
</cursor>
<Label text="Projects" textFill="#7c8184">
<font>
<Font name="Calibri Light" size="15.0" />
</font>
<HBox.margin>
<Insets left="10.0" />
</HBox.margin>
</Label>
</HBox>
<HBox id="users" alignment="CENTER_LEFT" layoutX="10.0" layoutY="132.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onMouseClicked="#handleViewChanged" prefHeight="40.0" prefWidth="300.0" styleClass="btns">
<padding>
<Insets left="10.0" />
</padding>
<cursor>
<Cursor fx:constant="HAND" />
</cursor>
<Label text="Users" textFill="#7c8184">
<font>
<Font name="Calibri Light" size="15.0" />
</font>
<HBox.margin>
<Insets left="10.0" />
</HBox.margin>
</Label>
</HBox>
<HBox id="organizations" alignment="CENTER_LEFT" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onMouseClicked="#handleViewChanged" prefHeight="40.0" prefWidth="300.0" styleClass="btns">
<padding>
<Insets left="10.0" />
</padding>
<cursor>
<Cursor fx:constant="HAND" />
</cursor>
<Label text="Organizations" textFill="#7c8184">
<font>
<Font name="Calibri Light" size="15.0" />
</font>
<HBox.margin>
<Insets left="10.0" />
</HBox.margin>
</Label>
</HBox>
<HBox id="templates" alignment="CENTER_LEFT" layoutX="10.0" layoutY="252.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onMouseClicked="#handleViewChanged" prefHeight="40.0" prefWidth="300.0" styleClass="btns">
<padding>
<Insets left="10.0" />
</padding>
<cursor>
<Cursor fx:constant="HAND" />
</cursor>
<Label text="Templates" textFill="#7c8184">
<font>
<Font name="Calibri Light" size="15.0" />
</font>
<HBox.margin>
<Insets left="10.0" />
</HBox.margin>
</Label>
</HBox>
<VBox prefHeight="10" prefWidth="300.0" styleClass="box" VBox.vgrow="ALWAYS">
<VBox.margin>
<Insets />
</VBox.margin>
<padding>
<Insets left="10.0" top="10.0" />
</padding>
</VBox>
<BorderPane fx:id="controlPane" prefHeight="150.0" prefWidth="300.0" styleClass="box" />
</VBox>
<VBox layoutX="300.0" prefHeight="600.0" prefWidth="724.0">
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="75.0" prefWidth="724.0" style="-fx-background-color: #DCDCDC;">
<effect>
<DropShadow blurType="ONE_PASS_BOX" color="#e8e4e4" height="10.0" radius="4.5" width="10.0" />
</effect>
<Label fx:id="titleText" layoutX="14.0" layoutY="24.0" text="Welcome" textFill="#7c8184">
<font>
<Font size="18.0" />
</font>
</Label>
</Pane>
<HBox alignment="CENTER" />
<BorderPane fx:id="appFrame" prefHeight="536.0" prefWidth="724.0">
<center>
<fx:include source="welcome.fxml" />
</center>
</BorderPane>
</VBox>
</AnchorPane>
MenuController-它将拥有用户对象并将其加载到UpdateUserController
public class MenuController implements Initializable {
@FXML
private AnchorPane anchorPane;
@FXML
private JFXButton updateUser;
private User user = new User("Joe","Rogan","username","password");
@Override
public void initialize(URL location, ResourceBundle resources) {
updateUser.setOnAction((ActionEvent event) -> {
initializeUpdateController("Path of the fxml file", user , "title");
});
}
}
public class UpdateUserController implements Initializable {
@FXML
private AnchorPane anchorPane;
@FXML
private TextField userNameField;
@FXML
private PasswordField passwordField;
@FXML
private JFXButton submit;
private DatabaseHelper helper = new DatabaseHelper();
@Override
public void initialize(URL location, ResourceBundle resources) {
submit.setOnAction((ActionEvent event) -> {
String userName = userNameField.getText();
String password = passwordField.getText();
String salt = helper.randomSaltString();
password = salt + password + salt;
password = sha256(password);
helper.updateUserInDatabase(username,password);
});
}
public void fillTextFields(User user) {
userNameField.setText(user.getUsername());
passwordField.setText(user.getPassword());
}
}
UpdateUserController
public class MenuController implements Initializable {
@FXML
private AnchorPane anchorPane;
@FXML
private JFXButton updateUser;
private User user = new User("Joe","Rogan","username","password");
@Override
public void initialize(URL location, ResourceBundle resources) {
updateUser.setOnAction((ActionEvent event) -> {
initializeUpdateController("Path of the fxml file", user , "title");
});
}
}
public class UpdateUserController implements Initializable {
@FXML
private AnchorPane anchorPane;
@FXML
private TextField userNameField;
@FXML
private PasswordField passwordField;
@FXML
private JFXButton submit;
private DatabaseHelper helper = new DatabaseHelper();
@Override
public void initialize(URL location, ResourceBundle resources) {
submit.setOnAction((ActionEvent event) -> {
String userName = userNameField.getText();
String password = passwordField.getText();
String salt = helper.randomSaltString();
password = salt + password + salt;
password = sha256(password);
helper.updateUserInDatabase(username,password);
});
}
public void fillTextFields(User user) {
userNameField.setText(user.getUsername());
passwordField.setText(user.getPassword());
}
}
此方法将使用要传递的字段初始化UpdateUserController
public void initializeUpdateController(String path, User user, String title) {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource(path));
try {
loader.load();
UpdateUserController controller = loader.getController();
controller.fillTextFields(user);
} catch (IOException e) {
System.out.println("Error init Update Controller " + e.getMessage());
}
loadAndShowStage(loader, title);
}
public static void loadAndShowStage(FXMLLoader loader, String title) {
Parent parent = loader.getRoot();
Stage stage = new Stage();
stage.setScene(new Scene(parent));
stage.setTitle(title);
stage.show();
}
有关更多帮助,请查看此链接。
1.
2.