我有一个带有几个项目(子项)的JavaFX 2.2 TilePane。我添加了css,以便在鼠标悬停时,项目的比例设置为1.2。默认情况下,子节点的顺序定义首先绘制的节点和最后绘制的节点。有没有办法让悬停项目优先于其他项目,而不是诉诸于前线()并使其成为最后一项(将其移至最后)。这个问题类似于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
答案 0 :(得分:2)
解决方案/解决方法
示例代码
我将以下代码添加到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);
}
});
背景
正如您所注意到的,重叠问题在某些库存窗格中无法解决,例如TilePane
。这是因为节点的z顺序以及相对布局位置都由TilePane子列表中节点的相对位置定义。在此类窗格中,您无法更改z顺序并将其置于前面而不将节点移动到TilePane
中的最后一个布局位置。
GridPane
不会遇到与TilePane
相同的问题,因为它的子节点列表顺序只定义了它的子节点的z顺序,而不是那些子节点的布局定位。 / p>
当JavaFX重新绘制TilePanel时,有没有办法(黑客?)实现我自己的检索子绘制顺序的代码?
是的,如果你有技能,你可以破解TilePane code。