JavaFX TilePane - 绘制子项的顺序

标签 javafx

我有一个包含多个项目(子项)的 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

最佳答案

解决方案/解决方法

  1. 使用 GridPane 而不是 TilePane
  2. 当用户点击网格中的某个项目时,对该项目调用 toFront

示例代码

我将以下代码添加到 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);
  }
});

calculator image1 calculator image2


背景

正如您所注意到的,重叠问题在某些现有 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/

相关文章:

JavaFX TranslateTransition 未达到定义的点

java - 使用 DirectoryChooser 选择外部设备

java - 如何获取新阶段 Controller JavaFX 的句柄

java - 通过按下按钮 Javafx 更改背景图像

css - 如何使用 CSS 在 JavaFX Scene Builder 中设置自定义字体

java - 在 JavaFX 中居中裁剪图像

java - 在 OS X 上启动终端并使用 Java 运行命令

java - 如何在 JavaFX 的 Flow Pane 布局中将元素定位在新行中?

java - 使用文件路径时,Arraylist 无法识别照片

JavaFX如何设置场景背景图片