0

高さを計算し、他の 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必要な答えが得られます。これは、再帰とループについて脳を働かせるためにここにある質問です。

4

1 に答える 1

1

スタックで再帰をエミュレートできます: スタックで再帰をどのようにエミュレートできますか?

私はかつて単純なフィボナッチのような再帰をエミュレートしようとしました:

f(n) = f(n-1) + f(n-2) + array[n]

結果はGitHub に配置され、リンクされた回答の説明に従って記述されます。最初に想像したよりも複雑な作業だったことを認めなければなりません。

于 2013-11-11T17:56:30.383 に答える