我有一个包含多个项目(子项)的 JavaFX 2.2 TilePane。我添加了 css,以便在鼠标悬停时,项目的比例设置为 1.2。默认情况下,子节点的顺序定义了首先绘制的节点和最后绘制的节点。有没有一种方法可以使悬停项目高于所有其他项目,而无需诉诸 toFront() 并将其成为最后一个项目(将其移动到末尾)。这个问题类似于https://stackoverflow.com/questions/13893514/scaling-children-in-a-flowpane-makes-the-children-clip-eachother (仍未得到答复)。
问题截图位于:http://vladeck.files.wordpress.com/2013/03/javafx_tilepane.png?w=640
最佳答案
解决方案/解决方法
示例代码
我将以下代码添加到 calculator 中,该代码基于网格布局,看起来类似于示例屏幕截图中的平铺布局。通过修改后的应用程序,我没有遇到计算器按钮重叠的情况。令我惊讶的是,虽然它们看起来有点奇怪,但缩放按钮使计算器更易于使用......
button.setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
button.toFront();
button.setScaleX(1.6); button.setScaleY(1.6);
}
});
button.setOnMouseExited(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
button.setScaleX(1); button.setScaleY(1);
}
});
背景
正如您所注意到的,重叠问题在某些现有 Pane (例如 TilePane
)中无法解决。这是因为节点的 z 顺序以及相对布局位置都是由节点在 TilePane 子列表中的相对位置定义的。在此类 Pane 中,如果不将节点移动到 TilePane
中的最后一个布局位置,则无法更改 z 顺序并将其置于前面。
GridPane
不会遇到与 TilePane
相同的问题,因为它的子节点列表顺序仅定义其子节点的 z 顺序,而不是布局定位这些子节点。
Is there a way (a hack?) to implement my own code of retrieving the children order for drawing when JavaFX repaints TilePanel?
是的,如果您有技能,您可以破解 TilePane code。
关于JavaFX TilePane - 绘制子项的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15701378/