【问题标题】:Get width / height of a GridPane column / row?获取 GridPane 列/行的宽度/高度?
【发布时间】:2013-04-16 23:47:11
【问题描述】:

虽然很明显如何在GridPane 中设置列​​/行的宽度/高度,但我如何实际查询这些值?

【问题讨论】:

    标签: java layout grid javafx-2


    【解决方案1】:

    JavaFX8:有一个包保护方法GridPane.getGrid 可以在两个暗淡的双精度数组中获取当前行/列的大小。您可以使用反射来访问它。在有安全经理的环境中,这不起作用。

    public double[][] getCurrentGrid(GridPane gp) {
        double[][] ret=new double [0][0];
    
        try {
            Method m=gp.getClass().getDeclaredMethod("getGrid");
            m.setAccessible(true);
            ret=(double[][])m.invoke(gp);                   
    
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        return ret;
    }
    

    【讨论】:

    • 该方法受包保护是有原因的!如果它在新版本中被删除,它会突然被破坏。
    • 我完全清楚这一点。但是因为没有其他方便的方法……而且 FX 中还有很多其他领域需要访问非 API 方法
    【解决方案2】:

    在 javafx-8 中现在有一个名为 GridPane#impl_getCellBounds 的方法可以解决问题,尽管它是内部 API 的一部分。 (不确定 javafx-2 中是否也有此功能)

    注意,正如 @olmstov 所评论的,所提到的方法在 javafx 的更高版本中已被弃用和删除。如果有更好的方法(与公共 API 兼容),建议使用该方法而不是此替代方法。

    【讨论】:

    • impl_getCellBounds 已弃用,将在未来版本中删除
    • @Olmstov 我知道这一点,这就是为什么我明确提到“javafx-8”和“内部 API 的一部分”。 'javafx 9+' 中删除了许多内部 API 方法,但这并不意味着它对于 'javafx-8' 开发人员不存在。尽管出于兼容性原因,如果可能的话最好使用其他方式,但对于早期版本的 API,这样的功能可能只能通过使用 interal/depriated 方法来实现。
    • 很公平。如果您编辑帖子,我可以删除反对票。否则它不会让我没有某种类型的修改
    【解决方案3】:

    免责声明:我从问题中提取了这一点,OP (stefan.at.wpf) 自行回答了它。 Answers should not be contained in the question itself。还有don't use Edit/Update: Questions/Anwers don't need to record history


    可以将空的HBox/VBox 添加到相应的GridPane 列/行并将侦听器附加到HBox/VBox widthProperty/heightProperty,我仍然想知道是否有是一种直接获取GridPane中的列/行的宽度和高度的方法。

    【讨论】:

      猜你喜欢
      • 2020-03-04
      • 2021-06-23
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 2012-06-16
      • 2012-10-10
      • 2021-06-30
      • 1970-01-01
      相关资源
      最近更新 更多