JAVAFX-仅使用1个窗口更改特定窗格

JAVAFX-仅使用1个窗口更改特定窗格,javafx,pane,Javafx,Pane,你能帮我改变场景中的特殊窗格吗 因此,当我想点击菜单A时,内容将变为内容A。 当我单击菜单B时,内容将更改为内容B 我尝试使用2FXML并使用普通方法,如加载屏幕A和屏幕B 但结果只是改变了窗口。我只想更改一个窗口的内容 是否有任何建议如何更改1个窗口中的特定窗格?作为选项。 为任何“内容”创建FXML和控制器,单击“某些”按钮删除旧“内容”并上载新内容 以下工作示例(根据James_D评论编辑): Main.java public class Main extends Application

你能帮我改变场景中的特殊窗格吗

因此,当我想点击菜单A时,内容将变为内容A。 当我单击菜单B时,内容将更改为内容B

我尝试使用2FXML并使用普通方法,如加载屏幕A和屏幕B

但结果只是改变了窗口。我只想更改一个窗口的内容

是否有任何建议如何更改1个窗口中的特定窗格?

作为选项。 为任何“内容”创建FXML和控制器,单击“某些”按钮删除旧“内容”并上载新内容

以下工作示例(根据James_D评论编辑):

Main.java

public class Main extends Application {
    Parent root;
    Stage stage;

    @Override
    public void start(Stage primaryStage) {
        try {
            root = FXMLLoader.load(getClass().getResource("Main.fxml"));
            stage = primaryStage;
            stage.setTitle("Stage");

            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }   
}
Main.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<BorderPane fx:id="mainPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">
   <left>
      <ToolBar orientation="VERTICAL" BorderPane.alignment="CENTER">
        <items>
          <Button mnemonicParsing="false" onAction="#onBtnAClick" text="A" />
            <Button mnemonicParsing="false" onAction="#onBtnBClick" text="B" />
            <Button mnemonicParsing="false" onAction="#onBtnCClick" text="C" />
        </items>
      </ToolBar>
   </left>
</BorderPane>
以及一些内容示例:

ContentA.java

public class ContentA extends AnchorPane{

    public ContentA(){
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("ContentA.fxml"));

        fxmlLoader.setRoot(this);
        fxmlLoader.setController(this);

        try {
            fxmlLoader.load();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
ContentA.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<fx:root prefHeight="200.0" prefWidth="300.0" type="AnchorPane" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <ListView layoutX="50.0" layoutY="-26.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
   </children>
</fx:root>

试着使用这个,它很简单

Parent root = null; 
        try {
            root=FXMLLoader.load(getClass().getResource("your_FXML_File.fxml"));
        } catch (Exception e) {
        }
        borderpane.setCenter(root);

回答得很好,但你真的不需要
锚烷
,是吗?只要在
BorderPane
上调用
setCenter
,即可加载每一项内容。明白。这是我使用BorderPane的第一个代码,我几乎不知道)将在几分钟内修改)谢谢)
Parent root = null; 
        try {
            root=FXMLLoader.load(getClass().getResource("your_FXML_File.fxml"));
        } catch (Exception e) {
        }
        borderpane.setCenter(root);