0

次のようなGUIセットアップがあります。

例

ドキュメントを表示し、ユーザーがドキュメントJTextAreas内のテキストを追加/削除して編集できるようにします。

ドキュメントを開こうとすると問題が発生します。ドキュメント自体はJPanels、互いの上にあるレイヤーで構成されています。JPanelsGUI の 1 つのポイントに6 つ以上のレイヤーが存在することはありません。

の高さがどうなるか分からないのでJTextArea、親に対して相対的にする必要があります (つまり、指定しません)。

レイアウト マネージャー ( MigLayout) はコンポーネントの正確なサイズ (親との相対サイズ) を認識していないため、最初にその親に親のサイズを問い合わせます。そのサイズは再び不明であり、親の親に尋ねられます (レベル 1 または 2 の JPanel まで)。最終的には、多くのコンポーネントにサイズを問い合わせる必要があります (checkParent(Container)上記の例だけで、MigLayout 内のメソッドが 100 000 回以上呼び出されました)。

私がする必要があるのは、ドキュメントが開かれているときにのみJTextArea(またはJPanelそれが存在する) の高さを設定することです。そのため、レイアウト マネージャーはJTextAreas親に尋ねる必要がなく、再帰的な地獄が発生します。

ドキュメントを開いた後、高さをデフォルトにリセットする必要があります(テキストが追加/削除されると高さが調整されます)。

これを行う方法がまったくわかりません。または、これが進むべき道である場合、上記で説明したことが問題であると確信しています。

いくつかのメモ:

  • これはMigLayoutバグではありません。フォーラムにアクセスしました (下のリンク)。
  • これをチェックしてください(最後の投稿)
  • そのタスクは情報を保持するだけでなく、必要なスペースを正確に表示することであるため、JScrollPaneを に入れることはできませんJTextArea
  • ドキュメントを保存するときに高さを簡単に取得できるためJTextAreas、ドキュメントを再度開いたときに自由に使用できます

EDIT:この質問で参照されているドキュメントは、JTextAreasなどで使用されている「ドキュメント」ではなく、プログラムのカスタムクラスの「ドキュメント」です(次のように理解されない限り、無関係であるため言及しませんでした) 「文書」)。

4

1 に答える 1

1

モデルは階層構造であるためDocument、ツリーが必要です。インターフェイスにはノードごとにコントロールとビューの両方が必要なため、テーブルが必要です。ここOutlineに表示されているは、適切な選択である可能性があります。例がrootへの参照を保持しているように、ドキュメントの root への参照を保持します。a 、 a 、 aが含まれます。DocumentTreeModelElementFileTreeModelFileRowModelJLabelJCheckBoxJTextArea

于 2013-04-06T09:26:22.457 に答える