【发布时间】:2013-11-11 15:47:04
【问题描述】:
我想计算高度并设置可能包含其他 JSplitPane 和其他组件的 JSplitPane 的 resizeWeight。这个概念现在看起来如下(警告:sn-p,不是功能齐全的代码片段;我只需要使用累加器使用 while 循环重写递归调用的指南,而不是功能齐全的解决方案代码)。
splitPane.setResizeWeight(calculateComponentHeight(splitPane.getTopComponent()) / calculateNewSplitPaneHeight(splitPane));
...
private double calculateNewSplitPaneHeight(JSplitPane sp) {
return calculateComponentHeight(sp.getTopComponent()) + calculateComponentHeight(sp.getBottomComponent());
}
private double calculateComponentHeight(Component c) {
if (c instanceof JSplitPane) {
return calculateNewSplitPaneHeight((JSplitPane) c);
}
return (double) c.getHeight();
}
由于我可能不知道拆分窗格的嵌入程度,解决此类递归的实用方法是什么?
是的,我知道,splitPane.getPreferredSize().height 和 splitPane.getTopComponent().getPreferredSize().height 无需任何递归调用即可给我所需的答案。这个问题只是为了在递归和循环上动脑筋。
【问题讨论】:
-
出于兴趣,您为什么要进行此更改?
-
因为我发现将递归转换为循环很有趣。然而,我发现自己是一个有趣的问题,它看起来像一个双重递归,它让我一直在思考如何解决这样的递归。我想教我的大脑以这种方式思考。