首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JavaFX中删除可点击的窗格(在控制器中)

在JavaFX中删除可点击的窗格(在控制器中)
EN

Stack Overflow用户
提问于 2019-06-10 08:07:50
回答 1查看 26关注 0票数 -1

我正在设置一个游戏,我已经尝试了许多方法来尝试摆脱这些窗格,这些窗格只需要每“转”一次。我需要一种方法来逆转在每个单元格中创建多个窗格的函数。我试过了:

代码语言:javascript
复制
      for (int i = 0 ; i < numCols ; i++) {
                for (int j = 0; j < numRows; j++) {
                    addPane(i, j);
                }
            }
        }


        private void addPane(int colIndex, int rowIndex) {
            Pane pane = new Pane();
            pane.setOnMouseEntered(e -> {
                System.out.printf("Mouse enetered cell [%d, %d]%n", colIndex, rowIndex);
            });
            grid.add(pane, colIndex, rowIndex);
        }
private void removePane(int colIndex, int rowIndex) {
            Pane pane2 = new Pane();
            pane.getChildren().remove(pane2);
        }

      for (int i = 0 ; i < numCols ; i++) {
                for (int j = 0; j < numRows; j++) {
                    removePane(i, j);
                }
            }
        }

我希望在使用removePane函数时,所有窗格都会被删除,但没有任何变化。窗格仍然在每个单元格中。

EN

回答 1

Stack Overflow用户

发布于 2019-06-10 09:27:41

List.remove(Object)的工作原理是这样的:

如果在使用equals进行比较时,列表中存在与传递给方法的参数匹配的元素,则会删除该元素。

由于Pane不覆盖equals方法,因此如果传递的元素是列表中的一个对象,则删除子列表中的一个元素。因为您创建了一个新的子列表,所以removePane会保持Pane列表不变。

您需要使用其他方法删除GridPane的子项,例如

使用子列表的the clear method

  • 。这将删除所有的子节点,并且如果有您想要保留的节点,该操作将不起作用。如果您知道要删除的子项的索引范围,可以在a sublist though.
  • using the removeIf method上调用clear。这允许你传递一个Predicate,用于检查一个元素是否应该被移除或保留在列表中。
  • 使用removeAll(Collection)方法传递你想要移除/保留的子元素的Collection。这需要你跟踪你的代码中想要移除/不移除的窗格。例如,您可以将这些节点添加到addPane方法中的集合中。确保在从子节点列表中删除节点后更新此集合,除非以后需要它们,因为这是内存leak.
  • ...

的潜在来源

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56519241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档