JavaFX TilePane - 绘制子项的顺序

时间:2013-03-29 10:23:20

标签: javafx

我有一个带有几个项目(子项)的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

1 个答案:

答案 0 :(得分:2)

解决方案/解决方法

  1. 使用GridPane代替TilePane
  2. 当用户点击网格中的某个项目时,请在该项目上调用toFront

  3. 示例代码

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


    背景

    正如您所注意到的,重叠问题在某些库存窗格中无法解决,例如TilePane。这是因为节点的z顺序以及相对布局位置都由TilePane子列表中节点的相对位置定义。在此类窗格中,您无法更改z顺序并将其置于前面而不将节点移动到TilePane中的最后一个布局位置。

    GridPane不会遇到与TilePane相同的问题,因为它的子节点列表顺序只定义了它的子节点的z顺序,而不是那些子节点的布局定位。 / p>

      

    当JavaFX重新绘制TilePanel时,有没有办法(黑客?)实现我自己的检索子绘制顺序的代码?

    是的,如果你有技能,你可以破解TilePane code