Добро пожаловать в Stackoverflow Labib, относительно разделения:
У вас может быть корневой FXML, который содержит, например, только GridPane (или что-то еще, но я продолжу на предпосылке GridPane), теперь вынастройте Grid (без содержимого) в этом корневом файле FXML. Если у вас уже есть готовый графический интерфейс, у вас должно быть четкое представление о том, насколько крупными должны быть ячейки сетки.В вашем основном классе у вас есть:
Основной класс, который расширяет приложение и запускает GUI
public class GUI extends Application {
private Stage stage;
private GridPane rootGrid;
@Override
public void start(Stage stage) {
this.stage = stage;
// Load root layout from fxml file.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(WindowRoot.class.getResource("RootGrid.fxml"));
rootGrid = (GridPane) loader.load();
// Show the scene containing the root layout.
Scene scene = new Scene(rootGrid);
stage.setTitle("Test");
stage.show();
//fill the Grid
setupGrid();
}
Теперь у вас есть rootGrid
в качестве атрибута класса, который является простоСетка с пустыми строками / столбцами, заданными в RootGrid.fxml
, может быть простой:
Пример FXML, две строки, два столбца, без содержимого
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<GridPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.141">
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" />
<RowConstraints minHeight="10.0" prefHeight="30.0" />
</rowConstraints>
<columnConstraints>
<ColumnConstraints minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
</GridPane>
Теперь вы создаете документы FXML для каждой ячейки, которую хотите заполнить, и в этом FXML у вас есть одна AnchorPane с содержимым этой ячейки.Затем вы добавляете его в Grid как часть метода start
.Допустим, вы хотите в этом простом примере меню.Создайте FXML для меню:
пример простого меню fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.141">
<children>
<MenuBar>
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
</menus>
</MenuBar>
</children>
</AnchorPane>
И добавьте его в сетку как часть метода start
(но, вероятно,Извлеките его в метод, который вы вызываете при запуске, например setupGrid()
:
Настройка Grid, вызываемой при запуске (стадия)
private void setupGrid() {
// Add Menubar
FXMLLoader loader = new FXMLLoader();
loader.setLocation(WindowRoot.class.getResource("menubar.fxml"));
AnchorPane anchor = (AnchorPane) loader.load();
//put it in first column, first row
GridPane.setConstraints(anchor, 0, 0);
//optional, let it span both/all columns
GridPane.setRowSpan(anchor, 2);
rootGrid.getChildren().add(anchor);
You 'Вам нужно будет попробовать / исключить блоки ввода-вывода, оставив их для лучшей читабельности. Для других «корневых панелей» вам понадобятся другие методы настройки, например для borderPane, у вас будут такие вещи, как rootGrid.setTop(anchor)
.
Hopeэто помогает. Веселитесь.