Java 如何使fxml文件适合ChildanCorpane?
我正在做我的项目,它有两个fxml文件,我设法从MainController以两种方式打开了两个fxml文件,如 这两个操作都是通过单击按钮执行的Java 如何使fxml文件适合ChildanCorpane?,java,javafx,javafx-8,scenebuilder,Java,Javafx,Javafx 8,Scenebuilder,我正在做我的项目,它有两个fxml文件,我设法从MainController以两种方式打开了两个fxml文件,如 这两个操作都是通过单击按钮执行的 创建和打开新的舞台、场景并加载fxml文件 用fxml替换儿童锚烷 问题是在第二种方式:fxml文件将不适合根据子锚点窗格,我已经在我的主fxml文件中定义了坐标,它出现在primaryStage的左上角,有什么方法可以解决这个问题 请按照屏幕截图说明我的应用程序的GUI视图。 MainController.java 首先,使用内部类的构造函数来修
首先,使用内部类的构造函数来修改场景是毫无意义的,除非这些类具有其他一些功能。在这种情况下,创建对象并没有真正的原因。相反,功能应该转移到方法,例如
void replaceChild() throws IOException{
HostScreen = (AnchorPane)FXMLLoader.load(getClass().getResource("SQLHostWindow.fxml"));
MainScreen.getChildren().set(0, HostScreen);
System.out.println(MainScreen.getChildren().get(0));
}
@FXML
public void OpenHostScreen(ActionEvent event) throws IOException{
replaceChild();
}
此外,不能仅仅因为替换了节点,就期望将原始节点的布局参数传递到替换节点<代码>窗格s通常将布局属性存储在子节点的属性
映射内。此地图的内容不会自动复制
此外,子节点
的某些属性可能与父节点相关,具体取决于它的类型和存储在属性
中的参数:
,layoutX
(如果它们不是由家长决定的)layoutY
managed
- 平移、旋转、缩放
- 大小
layoutX
、layoutY
、prefWidth
和prefHeight
来完成
示例
@Override
public void start(Stage primaryStage) {
Region back = new Region();
back.relocate(10, 10);
back.setPrefSize(590, 390);
back.setStyle("-fx-background-color: blue;");
AnchorPane.setBottomAnchor(back, 10d);
// AnchorPane.setTopAnchor(back, 10d);
AnchorPane.setLeftAnchor(back, 10d);
AnchorPane.setRightAnchor(back, 10d);
Button btn = new Button("Change");
AnchorPane root = new AnchorPane(back, btn);
btn.setOnAction((ActionEvent event) -> {
// replace first child of root with new one; keep anchors & position/size
Region region = new Region();
region.setStyle("-fx-background-color: red;");
Node oldRegion = root.getChildren().set(0, region);
// copy properties from old map
Map<Object, Object> properties = region.getProperties();
oldRegion.getProperties().forEach((k, v) -> properties.putIfAbsent(k, v));
// copy position & set pref size to size of replaced node
region.relocate(oldRegion.getLayoutX(), oldRegion.getLayoutX());
Bounds bounds = oldRegion.getLayoutBounds();
region.setPrefSize(bounds.getWidth(), bounds.getHeight());
});
Scene scene = new Scene(root, 600, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
@覆盖
公共无效开始(阶段primaryStage){
区域返回=新区域();
返回。重新定位(10,10);
back.setPrefSize(590390);
back.setStyle(“-fx背景色:蓝色;”);
锚烷.立根摇床(背部,10d);
//AnchorPane.setTopAnchor(背面,10d);
AnchorPane.setLeftAnchor(背面,10d);
AnchorPane.setRightAnchor(背面,10d);
按钮btn=新按钮(“更改”);
锚烷根=新锚烷(背面,btn);
btn.setOnAction((ActionEvent事件)->{
//用新的替换根的第一个子级;保留锚固件和位置/尺寸
区域=新区域();
region.setStyle(“-fx背景色:红色;”);
节点oldRegion=root.getChildren().set(0,区域);
//从旧地图复制属性
映射属性=region.getProperties();
forEach((k,v)->properties.putIfAbsent(k,v));
//复制位置并将pref size设置为替换节点的大小
region.relocate(oldRegion.getLayoutX(),oldRegion.getLayoutX());
Bounds Bounds=oldRegion.getLayoutBounds();
region.setPrefSize(bounds.getWidth(),bounds.getHeight());
});
场景=新场景(root,600400);
初级阶段。场景(场景);
primaryStage.show();
}
@Override
public void start(Stage primaryStage) {
Region back = new Region();
back.relocate(10, 10);
back.setPrefSize(590, 390);
back.setStyle("-fx-background-color: blue;");
AnchorPane.setBottomAnchor(back, 10d);
// AnchorPane.setTopAnchor(back, 10d);
AnchorPane.setLeftAnchor(back, 10d);
AnchorPane.setRightAnchor(back, 10d);
Button btn = new Button("Change");
AnchorPane root = new AnchorPane(back, btn);
btn.setOnAction((ActionEvent event) -> {
// replace first child of root with new one; keep anchors & position/size
Region region = new Region();
region.setStyle("-fx-background-color: red;");
Node oldRegion = root.getChildren().set(0, region);
// copy properties from old map
Map<Object, Object> properties = region.getProperties();
oldRegion.getProperties().forEach((k, v) -> properties.putIfAbsent(k, v));
// copy position & set pref size to size of replaced node
region.relocate(oldRegion.getLayoutX(), oldRegion.getLayoutX());
Bounds bounds = oldRegion.getLayoutBounds();
region.setPrefSize(bounds.getWidth(), bounds.getHeight());
});
Scene scene = new Scene(root, 600, 400);
primaryStage.setScene(scene);
primaryStage.show();
}