これはより論理的な問題/議論です。
MS Wrod に似たテキスト編集プログラムがあります。ドキュメントはページで構成されています。
1 つのページは、ページのコンテンツを保持する JPanel (A) です。その JPanel (A) ページ コンテンツに、他の JPanel (B) であるコンテンツが追加されます。ページの最後の要素は常に、占有されていないスペースをすべて埋めるフィラーです。
私がしなければならないことは、JPanel (B) の移行を管理することです。最後のページがいっぱいになったら、次のページに移動する必要があります。ページのスペースが解放されたら、次のページの最初の要素がそのスペースに収まるかどうかを確認して上に移動する必要があります。
Filler にアタッチされたコンポーネント リスナーでそれを達成しようとしています。Fillers の高さが 0 になると、ページはいっぱいになり、拡大する場合は、要素がページから削除されました (またはその高さが減少しました)。
単純なように見えますが、いくつか問題があります。JPanels (B) はすべて同じサイズではありません。
つまり、JPanel (B) がページから削除されると、次のページの複数の JPanel(B) がそのスペースに収まる可能性があります。また、ページの最初の JPanel (B) の高さが縮小された場合、前のページにも収まる可能性があることも意味します (新しい高さが前のページのフィラーの高さよりも小さい場合)。十分な大きさがあれば、次のページの JPanel (B) を現在のページに追加できます。
これらすべてを考慮すると、それに基づいてかなりの量のコードを作成できます。しかし、これはすべてコンポーネント リスナー内で行われるため、非常に扱いにくいものです。
JPanels (B) を移動すると、前/次のページのコンポーネント リスナーがトリガーされます。リスナーコードの実行中にブールセットをtrueに追加し、そのブール値がfalseの場合にのみリスナーを実行することで回避できますが、他のページリスナーをまったく呼び出さないため、これも良くありません。最後に呼び出されます。
また、ここにサブ質問を追加したいと思います: 別のリスナーからリスナーを呼び出した場合、すぐに実行されますか、それともリスナーが完了した後に実行されますか? 答えが後である場合、複数回呼び出すと、1回だけ実行されますか、それとも数回実行されますか? リスナーがそれ自体から呼び出された場合はどうなりますか?
私の主な質問は、この Word のようなページ コンテンツ管理を Java でより簡単な方法で実現できる方法はありますか? どういうわけか、これらすべてを自動的に管理する方法で配置された一連のコンポーネントを作成しますか (JTextArea のワードラップに似たもの)?
私はJavaとSwingの初心者にすぎないので、これに使用できるコンポーネントがいくつかあるのでしょうか、それともいくつかを適切に組み合わせるとこのように動作するのでしょうか? たぶん、いくつかのレイアウトが管理されていますか?
いくつかの高い JPanel を作成する場合、ページ番号に応じて高さを増減できます。コンポーネントがその前に追加されている場合、高さがセパレーターに残されたスペースは、自動的にその後に配置されますか? そうすれば、ページの錯覚を作成できます。
これらはほんの一部のアイデアです。それらのいくつかが可能であるか、誰かがより良い解決策を持っていることを願っています...