BorderPanes 中的 JavaFX 节点对齐
JavaFX Node Alignment in BorderPanes
我遇到的问题是,当我尝试将图块添加到边框窗格的中心,然后将该边框窗格添加到根边框窗格的中心时,对齐方式很不正确。
这是我创建主窗格或 "root" 窗格的地方,我将其命名为 mainPane
。然后我创建了 bottomPane
和 centerPane
来保存最终将添加到 mainPane
底部和中心的项目:
BorderPane mainPane = new BorderPane();
BorderPane bottomPane = new BorderPane();
BorderPane centerPane = new BorderPane();
Button quitButton = new Button("Quit Game");
bottomPane.setRight(quitButton);
Text gameWinLabel = new Text();
gameWinLabel.setText("You win!");
gameWinLabel.setFont(Font.font("Times New Roman", 50));
gameWinLabel.setVisible(false);
bottomPane.setCenter(gameWinLabel);
然后我编写了为记忆游戏生成方块的代码:
char c = 'A';
List<Tile> tiles = new ArrayList<>();
for (int i = 0; i < NUM_OF_PAIRS; i++) {
tiles.add(new Tile(String.valueOf(c)));
tiles.add(new Tile(String.valueOf(c)));
c++;
}
Collections.shuffle(tiles);
for (int i = 0; i < tiles.size(); i++) {
Tile tile = tiles.get(i);
tile.setTranslateX(100 * (i % NUM_PER_ROW));
tile.setTranslateY(100 * (i / NUM_PER_ROW));
centerPane.getChildren().add(tile);
}
最后,我将容器窗格固定到 mainPane
:
mainPane.setBottom(bottomPane);
mainPane.setCenter(centerPane);
这是当前输出:
最终目标是让游戏以 mainPane
为中心。
提前感谢您的任何建议!
正如我在评论中提到的,GridPane 对您来说是更好的选择,要做到这一点,您可以这样做:
GridPane root = new GridPane(), centreGrid = new GridPane();
root.setAlignment(Pos.CENTER);
BorderPane bottomPane = new BorderPane();
Integer rowCount = 0 ,colCount = 0;
Button quitButton = new Button("Quit Game");
bottomPane.setRight(quitButton);
Text gameWinLabel = new Text();
gameWinLabel.setText("You win!");
gameWinLabel.setFont(Font.font("Times New Roman", 50));
gameWinLabel.setVisible(false);
bottomPane.setCenter(gameWinLabel);
char c = 'A';
List<Tile> tiles = new ArrayList<>();
for (int i = 0; i < NUM_OF_PAIRS; i++) {
tiles.add(new Tile(String.valueOf(c)));
tiles.add(new Tile(String.valueOf(c)));
c++;
}
Collections.shuffle(tiles);
for (int i = 0; i < tiles.size(); i++) {
Tile tile = tiles.get(i);
if (rowCount > 4) {
rowCount += 1;
colCount = 0;
}
centreGrid.add(tile, colCount, rowCount);
colCount += 1;
}
root.add(centreGrid, 0, 1);
root.add(bottomGrid, 0, 2);
至于顶部部分,请随意添加您喜欢的任何内容。有关详细信息,您可以参考 Oracle 页面上的 GridPane。
为了避免麻烦,我调整了 mainPane
的大小以适应游戏面板的大小。我意识到这并不是对齐的真正答案,但为了让游戏板更好(这是我的目标),我认为我的解决方案还可以。
感谢您的宝贵时间和帮助!
我遇到的问题是,当我尝试将图块添加到边框窗格的中心,然后将该边框窗格添加到根边框窗格的中心时,对齐方式很不正确。
这是我创建主窗格或 "root" 窗格的地方,我将其命名为 mainPane
。然后我创建了 bottomPane
和 centerPane
来保存最终将添加到 mainPane
底部和中心的项目:
BorderPane mainPane = new BorderPane();
BorderPane bottomPane = new BorderPane();
BorderPane centerPane = new BorderPane();
Button quitButton = new Button("Quit Game");
bottomPane.setRight(quitButton);
Text gameWinLabel = new Text();
gameWinLabel.setText("You win!");
gameWinLabel.setFont(Font.font("Times New Roman", 50));
gameWinLabel.setVisible(false);
bottomPane.setCenter(gameWinLabel);
然后我编写了为记忆游戏生成方块的代码:
char c = 'A';
List<Tile> tiles = new ArrayList<>();
for (int i = 0; i < NUM_OF_PAIRS; i++) {
tiles.add(new Tile(String.valueOf(c)));
tiles.add(new Tile(String.valueOf(c)));
c++;
}
Collections.shuffle(tiles);
for (int i = 0; i < tiles.size(); i++) {
Tile tile = tiles.get(i);
tile.setTranslateX(100 * (i % NUM_PER_ROW));
tile.setTranslateY(100 * (i / NUM_PER_ROW));
centerPane.getChildren().add(tile);
}
最后,我将容器窗格固定到 mainPane
:
mainPane.setBottom(bottomPane);
mainPane.setCenter(centerPane);
这是当前输出:
最终目标是让游戏以 mainPane
为中心。
提前感谢您的任何建议!
正如我在评论中提到的,GridPane 对您来说是更好的选择,要做到这一点,您可以这样做:
GridPane root = new GridPane(), centreGrid = new GridPane();
root.setAlignment(Pos.CENTER);
BorderPane bottomPane = new BorderPane();
Integer rowCount = 0 ,colCount = 0;
Button quitButton = new Button("Quit Game");
bottomPane.setRight(quitButton);
Text gameWinLabel = new Text();
gameWinLabel.setText("You win!");
gameWinLabel.setFont(Font.font("Times New Roman", 50));
gameWinLabel.setVisible(false);
bottomPane.setCenter(gameWinLabel);
char c = 'A';
List<Tile> tiles = new ArrayList<>();
for (int i = 0; i < NUM_OF_PAIRS; i++) {
tiles.add(new Tile(String.valueOf(c)));
tiles.add(new Tile(String.valueOf(c)));
c++;
}
Collections.shuffle(tiles);
for (int i = 0; i < tiles.size(); i++) {
Tile tile = tiles.get(i);
if (rowCount > 4) {
rowCount += 1;
colCount = 0;
}
centreGrid.add(tile, colCount, rowCount);
colCount += 1;
}
root.add(centreGrid, 0, 1);
root.add(bottomGrid, 0, 2);
至于顶部部分,请随意添加您喜欢的任何内容。有关详细信息,您可以参考 Oracle 页面上的 GridPane。
为了避免麻烦,我调整了 mainPane
的大小以适应游戏面板的大小。我意识到这并不是对齐的真正答案,但为了让游戏板更好(这是我的目标),我认为我的解决方案还可以。
感谢您的宝贵时间和帮助!