如何确定 JavaFX 中窗格的分层
How can I determine the layering of panes in JavaFX
我想保留一个工作区,然后在用户再次打开 window 时恢复它。
例如我有以下内容:
//Create the workspace there the panes will live
Pane workspace = new Pane();
//Create the layers - assume there is code to allow these to be dragged and moved
Pane layer1 = new Pane();
Pane layer2 = new Pane();
Pane layer3 = new Pane();
workspace.getChildren().addAll(layer1, layer2, layer3);
我知道我可以 select 通过执行以下操作,哪一层在上面:
layer2.toFront();
然而,我似乎无法找到确定当前哪一层位于顶部的能力。
即
layer1.setOnToFront(event -> {});
layer1.setOnToBack(event -> {});
甚至
boolean onTop = layer1.isOnTop();
有没有办法确定节点的位置,以便在工作区打开时,可以再次显示前面板?
谢谢!
toFront()
简单地通过重新排序父节点的子节点列表将节点移动到前面(具体来说,它将节点移动到列表中的最后一个位置)。
因此,您只需查看 workspace.getChildren()
即可确定顺序。如果您想在订单更改时收到通知,只需在列表中注册一个监听器即可:
workspace.getChildren().addListener((Change change) -> { });
Pane 中节点的渲染顺序(从后到前)基于窗格子列表中节点的索引。
因此您可以使用以下函数确定给定节点的索引:
int idx = pane.getChildren().indexOf(layerX);
您可以使用以下方法确定顶级节点:
Node top =
pane.getChildren.size() > 0
? pane.getChildren().get(pane.getChildren().size() - 1)
: null;
您可以使用 ListChangeListener:
监听节点顺序的变化
pane.getChildren().addListener(new ListChangeListener<Item>() {
public void onChanged(Change<Item> c) {
while (c.next()) {
// process the next change.
}
}
});
我想保留一个工作区,然后在用户再次打开 window 时恢复它。
例如我有以下内容:
//Create the workspace there the panes will live
Pane workspace = new Pane();
//Create the layers - assume there is code to allow these to be dragged and moved
Pane layer1 = new Pane();
Pane layer2 = new Pane();
Pane layer3 = new Pane();
workspace.getChildren().addAll(layer1, layer2, layer3);
我知道我可以 select 通过执行以下操作,哪一层在上面:
layer2.toFront();
然而,我似乎无法找到确定当前哪一层位于顶部的能力。
即
layer1.setOnToFront(event -> {});
layer1.setOnToBack(event -> {});
甚至
boolean onTop = layer1.isOnTop();
有没有办法确定节点的位置,以便在工作区打开时,可以再次显示前面板?
谢谢!
toFront()
简单地通过重新排序父节点的子节点列表将节点移动到前面(具体来说,它将节点移动到列表中的最后一个位置)。
因此,您只需查看 workspace.getChildren()
即可确定顺序。如果您想在订单更改时收到通知,只需在列表中注册一个监听器即可:
workspace.getChildren().addListener((Change change) -> { });
Pane 中节点的渲染顺序(从后到前)基于窗格子列表中节点的索引。
因此您可以使用以下函数确定给定节点的索引:
int idx = pane.getChildren().indexOf(layerX);
您可以使用以下方法确定顶级节点:
Node top =
pane.getChildren.size() > 0
? pane.getChildren().get(pane.getChildren().size() - 1)
: null;
您可以使用 ListChangeListener:
监听节点顺序的变化pane.getChildren().addListener(new ListChangeListener<Item>() {
public void onChanged(Change<Item> c) {
while (c.next()) {
// process the next change.
}
}
});