次のようなGUIセットアップがあります。
ドキュメントを表示し、ユーザーがドキュメントJTextAreas
内のテキストを追加/削除して編集できるようにします。
ドキュメントを開こうとすると問題が発生します。ドキュメント自体はJPanels
、互いの上にあるレイヤーで構成されています。JPanels
GUI の 1 つのポイントに6 つ以上のレイヤーが存在することはありません。
の高さがどうなるか分からないのでJTextArea
、親に対して相対的にする必要があります (つまり、指定しません)。
レイアウト マネージャー ( MigLayout
) はコンポーネントの正確なサイズ (親との相対サイズ) を認識していないため、最初にその親に親のサイズを問い合わせます。そのサイズは再び不明であり、親の親に尋ねられます (レベル 1 または 2 の JPanel まで)。最終的には、多くのコンポーネントにサイズを問い合わせる必要があります (checkParent(Container)
上記の例だけで、MigLayout 内のメソッドが 100 000 回以上呼び出されました)。
私がする必要があるのは、ドキュメントが開かれているときにのみJTextArea
(またはJPanel
それが存在する) の高さを設定することです。そのため、レイアウト マネージャーはJTextAreas
親に尋ねる必要がなく、再帰的な地獄が発生します。
ドキュメントを開いた後、高さをデフォルトにリセットする必要があります(テキストが追加/削除されると高さが調整されます)。
これを行う方法がまったくわかりません。または、これが進むべき道である場合、上記で説明したことが問題であると確信しています。
いくつかのメモ:
- これは
MigLayout
バグではありません。フォーラムにアクセスしました (下のリンク)。 - これをチェックしてください(最後の投稿)
- そのタスクは情報を保持するだけでなく、必要なスペースを正確に表示することであるため、
JScrollPane
を に入れることはできませんJTextArea
- ドキュメントを保存するときに高さを簡単に取得できるため
JTextAreas
、ドキュメントを再度開いたときに自由に使用できます
EDIT:この質問で参照されているドキュメントは、JTextAreasなどで使用されている「ドキュメント」ではなく、プログラムのカスタムクラスの「ドキュメント」です(次のように理解されない限り、無関係であるため言及しませんでした) 「文書」)。