2016-09-11 49 views
0

您可以幫助我如何更改1場景中的Spesific窗格。JAVAFX - 僅使用1個窗口更改特定窗格

Description

所以,當我想點擊菜單A.內容將更改爲內容A. ,當我點擊菜單B.內容將被更改爲內容B

我嘗試與2 FXML和使用正常的方法,如加載屏幕A屏幕B

但結果只是改變窗口。我只想用1個窗口來更改內容。

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

回答

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> 

Controller.java

import javafx.fxml.FXML; 
import javafx.scene.layout.BorderPane; 

public class Controller { 

    @FXML 
    BorderPane mainPane; 

    @FXML 
    public void onBtnAClick(){ 
     ContentA contentA = new ContentA(); 
     mainPane.setCenter(contentA); 
    } 

    @FXML 
    public void onBtnBClick(){ 
     ContentB contentB = new ContentB(); 
     mainPane.setCenter(contentB); 
    } 

    @FXML 
    public void onBtnCClick(){ 
     ContentC contentC = new ContentC(); 
     mainPane.setCenter(contentC); 
    } 

} 

而Conten的一些樣品T:

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> 
+0

偉大的答案,但你並不真正需要的'AnchorPane',你呢?只需在加載的每個內容的'BorderPane'上調用'setCenter'即可。 –

+0

羅傑。這是我與BorderPane的第一個代碼,我幾乎不知道)將在幾分鐘內修改)謝謝) – gearquicker