如何将拖动的节点放在别人面前(JavaFX 8)?

时间:2017-04-22 06:17:47

标签: java javafx-8

我正在尝试使用可拖动的棋子来实现棋盘,如下所示。但是,我无法保持被拖动的部分保持在其他节点前面的下方或右侧。左和右似乎工作正常。

我尝试通过首先声明import time with open('filename.txt', 'r') as f: for line in f: print(line.strip()) time.sleep(2) s形成方格背景以及之后的所有部分来解决这个问题,因为我读到Java根据{{1}的顺序分配z-index } s被添加到他们的StackPane。这种方法反映如下。我还尝试创建Node并向其中添加ParentGroup,以便能够使用StackPane。仅在显示的坐标标签中产生。

如何实现我追求的功能?

此方法创建了主板:

ImageView

此课程制作可拖动的图标:

toFront()

这就是我所看到的:

enter image description here

1 个答案:

答案 0 :(得分:1)

您从左到右逐行添加单元格。由于您将片段添加到单元格中,因此单元格的后代将覆盖上方或同一行中的单元格内容,并留在单元格中,并将被所有其他单元格的内容覆盖。

要解决此问题,您可以将拖动项目的父项设为GridPane中的最顶层节点:

public DraggablePieceIcon(Image image) {
    super(image);

    setOnMousePressed(event -> {
        mouseX = event.getSceneX();
        mouseY = event.getSceneY();

        // make cell containing this piece the top-most cell
        this.getParent().toFront()
    });

    ...
}

请注意,此解决方案将要求您实现一些逻辑,使其移动到的单元格的子项并将这些块移动到这些单元格的中心。否则,如果你稍后将这个片段拖到这样的单元格中,那么其他单元格就可以覆盖它......

另一种方法是制作GridPane本身的儿童作品。无论如何,您可以独立于细胞拖动碎片;单元格和棋子之间的关联对于模型(即在这种情况下是国际象棋规则的实现)非常重要,不适用于视图,通常这些部分是分开的。