我想计算高度并设置可能包含其他JSplitPanes和其他组件的JSplitPane的resizeWeight。这个概念现在看起来如下(警告:片段,不是一个功能完备的代码片段;我只需要使用累加器重写带有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
在没有任何递归调用的情况下向我提供了我需要的答案。这个问题仅仅是在一个人的大脑上进行递归和循环。
答案 0 :(得分:1)
您可以使用堆栈模拟递归:How can you emulate recursion with a stack?
我曾尝试模拟一个简单的Fibonacci式递归:
f(n) = f(n-1) + f(n-2) + array[n]
结果为placed on a GitHub,并根据链接答案中的说明编写。我应该承认,这比我想象的要复杂得多。