Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从一个网格窗格中移除锚烷并将其添加到另一个网格窗格会导致锚烷偏移_Java_User Interface_Javafx 8 - Fatal编程技术网

Java 从一个网格窗格中移除锚烷并将其添加到另一个网格窗格会导致锚烷偏移

Java 从一个网格窗格中移除锚烷并将其添加到另一个网格窗格会导致锚烷偏移,java,user-interface,javafx-8,Java,User Interface,Javafx 8,我正在用JavaFX编写一个拼字图形用户界面。我的“棋盘”和“瓷砖架”都是网格。电路板的每个索引都包含一个名为SquareWithBorder的锚链的扩展,当用户将瓷砖放置在电路板上时,会将名为LetterTileWithValue的“瓷砖”添加到该索引中。结果是一个网格窗格,包含锚烷,其中一些包含瓷砖我的瓷砖也是锚烷扩展。对于上下文,我的tile模型是tile类 我的问题是,当我将磁贴固定器从机架网格窗格移动到板网格窗格时,磁贴显示为向右偏移。磁贴偏移的距离取决于磁贴在机架中的位置。机架第一个

我正在用JavaFX编写一个拼字图形用户界面。我的“棋盘”和“瓷砖架”都是网格。电路板的每个索引都包含一个名为SquareWithBorder的锚链的扩展,当用户将瓷砖放置在电路板上时,会将名为LetterTileWithValue的“瓷砖”添加到该索引中。结果是一个网格窗格,包含锚烷,其中一些包含瓷砖我的瓷砖也是锚烷扩展。对于上下文,我的tile模型是tile类

我的问题是,当我将磁贴固定器从机架网格窗格移动到板网格窗格时,磁贴显示为向右偏移。磁贴偏移的距离取决于磁贴在机架中的位置。机架第一个位置的磁贴将显示在我单击的正方形中的板上。机架第二位置的磁贴将稍微偏移,第三位置的磁贴将稍微偏移,以此类推。。如果我将所有磁贴放置在Rack GridPane的第一个索引中,那么当我将它们移动到板中时,所有磁贴都将具有相同的偏移量。偏移量与磁贴在机架中的位置直接相关

下面是一个截图,希望能说明这一点

将磁贴从机架移动到电路板是通过onMouseClicked事件处理程序和侦听器实现的,这些事件处理程序和侦听器连接到ObservableList,ObservableList对电路板和机架进行建模。下面是一些代码片段

public void addTileToRack(Tile t) {
    LetterTileWithValue tempTile = new LetterTileWithValue(t.getToken(), t.getValue());
    tempTile.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            mainApp.setSelectedTile(tempTile);
            tempTile.setSelected();
        }

    });
    rack.addRow(0, tempTile);
}
将平铺对象添加到mainApp类中的模型时,将调用此方法。它位于屏幕截图中视图的控制器类中

public void setMainApp(MainApp mainApp) {
    this.mainApp = mainApp;

    for(int i = 0; i < (15*15); i++) {
        SquareWithBorder tempSquare = new SquareWithBorder(i);
        tempSquare.setMainApp(this.mainApp);
        tempSquare.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                LetterTileWithValue selectedTile = mainApp
                        .getSelectedTile();
                if (selectedTile != null) {
                    selectedTile.setRow(tempSquare.getIndex() / 15);
                    selectedTile.setCol(tempSquare.getIndex() % 15);
                    tempSquare.setTile(selectedTile);
                    move.put(selectedTile.getLetter(),
                            tempSquare.getIndex());
                    mainApp.clearSelectedTile();
                }
            }

        });
        board.add(tempSquare, i % 15, i / 15);
    }
}
此方法也在游戏视图的控制器类中

public void setTile(LetterTileWithValue tile) {
    if (tile != null) {
        ObservableList<Node> children = this.getChildren();
        tile.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                if(!tile.isFinalMove()) {
                    System.out.printf("[DEBUG - SWB setTile] Letter: %s\n",  
                            tile.getLetter());
                    mainApp.addToRack(new Tile(tile.getLetter()));
                    children.remove(tile);
                }
            }

        });
        children.add(tile);
    }
}
此方法位于SquareWithBorder类中,在选择一个机架平铺时单击一个正方形时调用