저는 JavaFX
에서 새로워졌습니다. 그래서 두 컨트롤러간에 데이터를 공유하는 데 도움이 필요합니다. 나는이 menuItem visluga_vid.setOnAction
에서 클릭하면 새 mdi windows
가 개방되어컨트롤러 간 javafx 통신
@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);
}
});
}
:
나는 간단한 메뉴가 간단한 창을 가지고있다. 그런 다음 mdi window
에서 다른 창을 열려고합니다. MdiWindows
에는 부모 (MDICanvas
)가 있고 MDICanvas
에는 부모 - AnchorPane
이 있습니다. MDIWIndows
에는 자체 컨트롤러가 있고 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);
}
});
}
}
새로운 MDIWindow
를 엽니 다 내가 MDIWindowController
에 MainController
에서 AnchorPane 및 MDICanvas
을 공유 할 수 있습니까?
데이터를 저장 한 다음 다른 컨트롤러에서 모델을 공유 할 모델을 만듭니다. MVC의 논리가 부족한 부분입니다. – Blip
'getter' 메소드를 컨트롤러에 추가하고 컨트롤러의 인스턴스로 호출 할 수 있습니다. 훌륭한 애플리케이션을 구축하는 데 도움이되는'Model View Controller Pattern '(MVC)을 배워야합니다. – GOXR3PLUS
@Blip은 http://stackoverflow.com/questions/32342864/applying-mvc-with-javafx에 대한 답변을 볼 때 JavaFX에서 MVC를 사용하여 컨트롤러간에 데이터를 공유하는 간단한 예를 보여줍니다. Eirini의 답변에서 링크 된 [afterburner.fx] (http://afterburner.adam-bien.com/) 프레임 워크는 컨트롤러에 동일한 모델 인스턴스를 전달하는 단순화 된 메커니즘을 제공합니다. –