【发布时间】:2019-11-07 20:06:55
【问题描述】:
我的 GameBoard 所需的 GridPane(它应该包含我的模拟器地形所具有的“图块”数量)不适合 ScrollPane。
改变层次结构并使用彩色容器来识别问题无助于解决问题本身。
包含 GameBoard 的主容器 FXML
<SplitPane dividerPositions="0.5" BorderPane.alignment="CENTER">
<items>
<AnchorPane>
<children>
<TextArea layoutX="1.0" layoutY="-14.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
</children>
</AnchorPane>
<ScrollPane prefWidth="800" prefHeight="500" hbarPolicy="ALWAYS" vbarPolicy="ALWAYS" >
<GameBoardCC fx:id="gameBoard" >
</ScrollPane>
</items>
</SplitPane>
自定义控件本身:
<fx:root xmlns:fx="http://javafx.com/fxml/1" type="AnchorPane" xmlns="http://javafx.com/javafx/8.0.221">
<GridPane fx:id="gameBoard"
style="-fx-background-color: green">
</GridPane>
</fx:root>
基本上是添加这些项目的代码,我很确定我从 Stackoverflow 获得了大部分代码
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
// create node
TerrainNode node = new TerrainNode ("Item " + i + "/" + j, i * 100, j *100, 100, 100);
node.setOpacity (0.5);
// add node to group
gameBoard.getChildren ( ).add (node);
}
}
滑块行为的图片,出于某种原因,这些节点没有添加到网格窗格中,而是添加到网格窗格之外?
Pictures of the Slider Situation
我希望将滑块“卡”在 50%(尽管这不是我现在主要关心的问题),并且由于我的模拟应该具有可变的网格大小和固定的瓷砖尺寸,滚动条应该出现在例如 20x20 网格或将来客户端变得太小时。
【问题讨论】:
-
能否提供Minimal, Reproducible Example。我对代码有点不清楚,因为您没有将列/行索引设置为节点。
-
link 目标是每次更改网格大小时都能创建新的网格窗格。每个网格元素都将由存储在 2D 数组中的值表示,但是一旦 GUI 工作正常,我会处理这个问题。
-
修改
translate属性离开GridPane认为不变的地方。您(可能)在这里所做的是将所有这些边界包含在(0,0)处的“单元格”中,然后仅调整渲染子项的位置。无论如何GridPane通常负责分配职位本身。专注于获得正确的尺寸,使用GridPane.add(Node, int, int)方法添加子代而不是getChildren().add(...)并让GridPane处理其余部分......顺便说一句:链接(或屏幕截图)不足以提供必要的代码。发布文本。 -
@fabian 非常感谢,这基本上是我必须做的唯一改变,使其行为相应。你有一个愉快的周末! :)