0
您可以幫助我如何更改1場景中的Spesific窗格。JAVAFX - 僅使用1個窗口更改特定窗格
所以,當我想點擊菜單A.內容將更改爲內容A. ,當我點擊菜單B.內容將被更改爲內容B
我嘗試與2 FXML和使用正常的方法,如加載屏幕A屏幕B
但結果只是改變窗口。我只想用1個窗口來更改內容。
是否有任何建議如何更改1窗口中的特定窗格?
您可以幫助我如何更改1場景中的Spesific窗格。JAVAFX - 僅使用1個窗口更改特定窗格
所以,當我想點擊菜單A.內容將更改爲內容A. ,當我點擊菜單B.內容將被更改爲內容B
我嘗試與2 FXML和使用正常的方法,如加載屏幕A屏幕B
但結果只是改變窗口。我只想用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>
偉大的答案,但你並不真正需要的'AnchorPane',你呢?只需在加載的每個內容的'BorderPane'上調用'setCenter'即可。 –
羅傑。這是我與BorderPane的第一個代碼,我幾乎不知道)將在幾分鐘內修改)謝謝) – gearquicker