Java 动态添加的视图不适合窗格
我想制作一个左边有菜单,右边有视图的应用程序。我有不同的fxml文件。1个主视图和多个视图 现在我加载了不同的视图,但右侧的视图不支持他的父视图 主视图 容器中的自定义视图加载 当前形式 控制器 我想要右视图以适应容器。您用于显示器右侧容器的窗格不进行布局,因此无论您使用何种设置,它都无法使内容填满可用空间 将边框窗格改为容器: 然后在控制器中,您只需每次将新内容设置为中心:Java 动态添加的视图不适合窗格,java,javafx,Java,Javafx,我想制作一个左边有菜单,右边有视图的应用程序。我有不同的fxml文件。1个主视图和多个视图 现在我加载了不同的视图,但右侧的视图不支持他的父视图 主视图 容器中的自定义视图加载 当前形式 控制器 我想要右视图以适应容器。您用于显示器右侧容器的窗格不进行布局,因此无论您使用何种设置,它都无法使内容填满可用空间 将边框窗格改为容器: 然后在控制器中,您只需每次将新内容设置为中心: public class Controller implements Initializable { @FXML
public class Controller implements Initializable {
@FXML private BorderPane container;
// ...
public void load(Views view){
if (views.containsKey(view)) {
Node newView = views.get(view);
container.setCenter(newView);
} else {
System.out.println("Error: key not found in map");
}
}
}
在主FXML文件中的第二个ColumnConstraints对象上尝试fillWidth=true。我测试了它,仍然不工作。啊,我猜第二个FXML文件中定义的网格窗格正在填充主网格窗格中的列,但表没有填充第二个FXML文件中的网格窗格?您可以将TableView作为第二个FXML文件的根吗?或者将GridPane.fillWidth=true添加到TableView以及上一个fillWidth。这里似乎有一些不必要的层,特别是第二个网格窗格。仍然没有,我将用屏幕截图更新。哦,你甚至还有另一个层。您的TableView位于GridPane内,GridPane内,GridPane内。除了最顶部的网格窗格之外,每个容器只有一个子容器,因此它是冗余的。特别是,由于窗格不执行布局,它无法使包含TableView的GridPane增长。您应该消除一些冗余层,尤其是窗格。至少在看不到主控制器的情况下,要演示如何操作并不容易。
<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>
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");
}
}
}
public class Controller implements Initializable {
@FXML private BorderPane container;
// ...
public void load(Views view){
if (views.containsKey(view)) {
Node newView = views.get(view);
container.setCenter(newView);
} else {
System.out.println("Error: key not found in map");
}
}
}