Ich möchte eine Anwendung mit einem Menü auf der linken Seite und der Ansicht auf der rechten Seite machen. Ich habe verschiedene fxml-Datei. 1 Haupt- und Mehrfachansicht für die Ansicht.Dynamisch hinzugefügt Ansicht passt nicht Pane
Im Moment lade ich andere Ansicht, aber die Ansicht auf rechts ist nicht seine Eltern.
Hauptansicht
<GridPane
xmlns="http://javafx.com/javafx/8.0.112"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="controller.Controller">
<columnConstraints>
<ColumnConstraints percentWidth="30.0" />
<ColumnConstraints percentWidth="70.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints />
</rowConstraints>
<children>
<GridPane maxWidth="Infinity" GridPane.columnIndex="0" GridPane.rowIndex="0">
<columnConstraints>
<ColumnConstraints percentWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<Button fx:id="devices" maxWidth="Infinity" mnemonicParsing="false" text="Devices" GridPane.columnIndex="0" GridPane.rowIndex="0" />
<Button fx:id="inventory" maxWidth="Infinity" mnemonicParsing="false" text="Inventory" GridPane.columnIndex="0" GridPane.rowIndex="1" />
</children>
</GridPane>
<Pane
fx:id="container"
minWidth="Infinity"
maxWidth="Infinity"
GridPane.hgrow="ALWAYS"
GridPane.vgrow="ALWAYS"
GridPane.columnIndex="1"
GridPane.columnSpan="1"
GridPane.rowIndex="0">
</Pane>
</children>
</GridPane>
Benutzerdefinierte Ansicht Last in Behälter
<GridPane
xmlns="http://javafx.com/javafx/8.0.112"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="controller.DevicesController"
GridPane.hgrow="ALWAYS"
GridPane.vgrow="ALWAYS">
<children>
<TableView
GridPane.columnIndex="0"
GridPane.columnSpan="1"
GridPane.hgrow="ALWAYS"
GridPane.vgrow="ALWAYS"
GridPane.rowIndex="0">
<columns>
<TableColumn text="Devices" />
<TableColumn text="C2" />
</columns>
</TableView>
</children>
</GridPane>
-Controller
public class Controller implements Initializable {
@FXML private Pane container;
@FXML private Button devices;
@FXML private Button inventory;
private HashMap<Views, Node> views;
private enum Views {
DEVICES,
INVENTORY
}
@Override
public void initialize(URL location, ResourceBundle resources) {
try {
views = new HashMap<>();
views.put(Views.DEVICES, FXMLLoader.load(getClass().getResource("../view/" + "view-devices.fxml")));
views.put(Views.INVENTORY, FXMLLoader.load(getClass().getResource("../view/" + "view-inventory.fxml")));
devices.setOnMouseClicked(v -> load(Views.DEVICES));
inventory.setOnMouseClicked(v -> load(Views.INVENTORY));
} catch (IOException e) {
e.printStackTrace();
}
}
public void load(Views view){
if (views.containsKey(view)) {
Node newView = views.get(view);
if (!container.getChildren().contains(newView)) {
container.getChildren().add(newView);
} else {
newView.resize(container.getMaxWidth(), container.getMaxHeight());
newView.toFront();
}
} else {
System.out.println("Error: key not found in map");
}
}
}
Ich möchte die richtige Ansicht auf den Container passen.
Try 'fillWidth = "true" 'auf dem zweiten' ColumnConstraints'-Objekt in der Haupt-FXML-Datei. –
Ich teste es, immer noch nicht funktioniert. –
Ah, ich nehme an, dass der in der zweiten FXML-Datei definierte Rasterbereich die Spalte im Hauptgitterbereich füllt, aber die Tabelle füllt nicht den Rasterbereich in der zweiten FXML-Datei? Kannst du das 'TableView' einfach zur Wurzel der zweiten FXML-Datei machen? Oder vielleicht 'GridPane.fillWidth =" true "' zu 'TableView' (sowie die vorherige' fillWidth') hinzufügen. Sie scheinen hier einige unnötige Ebenen zu haben (speziell das zweite Gitterfenster). –