gpt4 book ai didi

Controller 之间的javafx通信

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:00 25 4
gpt4 key购买 nike

我是 JavaFX 新手,因此我需要一些帮助来在两个 Controller 之间共享数据。

我有一个简单的窗口,其中有简单的菜单:

@FXML
Label labelLabel;

@FXML
MenuItem sbor;

@FXML
MenuItem alim_poluch;

@FXML
MenuItem paragraphs;

@FXML
MenuItem poluch_cat;

@FXML
MenuItem visluga_vid;


@FXML
AnchorPane menuPane;


@FXML
MDICanvas mdiCanvas;

@FXML
Tab tabOne;

@FXML
VislugaVidController vid;

@FXML
Tab tabTwo;

@FXML
public void initialize() {

MDICanvas mdiCanvas = new MDICanvas(MDICanvas.Theme.DEFAULT);
menuPane.getChildren().add(mdiCanvas);

AnchorPane.setBottomAnchor(mdiCanvas, -1d);
AnchorPane.setLeftAnchor(mdiCanvas, 0d);
AnchorPane.setTopAnchor(mdiCanvas, 0d);//Button place
AnchorPane.setRightAnchor(mdiCanvas, 0d);


sbor.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
Stage stage = new Stage();
AnchorPane pane = null;
try {
pane = FXMLLoader.load(getClass().getResource("/fxml/spr_pocht_sbor.fxml"));
} catch (IOException e) {
System.err.print("Can't open the resource file");
e.printStackTrace();
}
stage.setTitle("Почтовый сбор для перевода алиментов");
stage.setResizable(false);
Scene scene = new Scene(pane, 600, 450);
stage.setScene(scene);
stage.show();
}
});

alim_poluch.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
Stage stage = new Stage();
AnchorPane pane = null;
try {
pane = FXMLLoader.load(getClass().getResource("/fxml/spr_alim_poluch.fxml"));
} catch (IOException e) {
e.printStackTrace();
}

stage.setResizable(false);
stage.setTitle("Справочник получателей алиментов");
Scene scene = new Scene(pane, 800, 640);
stage.setScene(scene);
stage.show();
}
});

paragraphs.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
Stage stage = new Stage();
AnchorPane pane = null;
try {
pane = FXMLLoader.load(getClass().getResource("/fxml/paragraf.fxml"));
} catch (IOException e) {
e.printStackTrace();
}

stage.setResizable(false);
stage.setTitle("Параграф назначения денежных средств");
Scene scene = new Scene(pane, 300, 450);
stage.setScene(scene);
stage.show();
}
});

poluch_cat.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
Stage stage = new Stage();
AnchorPane pane = null;
try {
pane = FXMLLoader.load(getClass().getResource("/fxml/poluch_cat.fxml"));
} catch (IOException e) {
e.printStackTrace();
}

stage.setResizable(false);
stage.setTitle("Категории получателей");
Scene scene = new Scene(pane, 600, 450);
stage.setScene(scene);
stage.show();
}
});

visluga_vid.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {


AnchorPane content = null;
try {
content = FXMLLoader.load(getClass().getResource("/fxml/visluga_vid.fxml"));
} catch (IOException e) {
e.printStackTrace();
}
MDIWindow mdiWindow = new MDIWindow("1", new ImageView("/assets/WindowIcon.png"), "Виды выслуг", content);
Button buttonMaximize = mdiWindow.getBtnMaximize();
buttonMaximize.setDisable(true);
mdiWindow.setMaxSize(350, 450);
mdiWindow.setBtnMinimize(buttonMaximize);
mdiCanvas.addMDIWindow(mdiWindow);


}
});


}

当我单击 menuItem visluga_vid.setOnAction 时,新的 mdi 窗口 将打开。然后我想从mdi窗口打开另一个窗口。 MdiWindows 有父级 (MDICanvas),而 MDICanvas 有父级 - AnchorPaneMDIWIndows 有自己的 Controller 和 fxml 文件。

public class VislugaVidController {

@FXML
TableView vislugaVidTable;

@FXML
TextField naim_vislugaField;

@FXML AnchorPane menuPane;

@FXML
public void initialize() {

//main.init(this);



vislugaVidTable.setOnMousePressed(event -> {

if (event.isPrimaryButtonDown() && event.getClickCount() == 2) {
System.out.println(vislugaVidTable.getSelectionModel().getSelectedItem());
AnchorPane content = null;
try {
content = FXMLLoader.load(getClass().getResource("/fxml/visluga_nadb.fxml"));
} catch (IOException e) {
e.printStackTrace();
}


MDIWindow mdiWindow = new MDIWindow("1", new ImageView("/assets/WindowIcon.png"), "Надбавки", content);
Button buttonMaximize = mdiWindow.getBtnMaximize();
buttonMaximize.setDisable(true);
mdiWindow.setMaxSize(350, 450);
mdiWindow.setBtnMinimize(buttonMaximize);
mdiCanvas.addMDIWindow(mdiWindow);



}

});

}


}

如何将 AnchorPane 和 MDICanvasMainController 共享到 MDIWindowController 以打开新的 MDIWindow

最佳答案

通常,“如何在两个 Controller 之间共享任何内容”这个问题的答案是“使用服务”。如果您考虑一下,您只需要传递数据,这些数据以某种方式在 Controller 之间持久存在。在 javaFx 世界中,这应该是一个模型。

您创建的每个 .fxml 文件只能由一个 Controller 或演示器处理。将 .fxml View 与 Controller 结合起来作为应用程序的模块。这提供了可重用性。您的应用程序应包含一个或多个模块。

我建议您也查看 the afterburner fx 。在此示例中,您可以实际看到不同模块如何相互通信。

关于 Controller 之间的javafx通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40258764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com