JPanel に追加された順序ではなく、JPanel に表示される順序 (左上から右下) に従って JPanel 内のコンポーネントのリストを取得する方法はありますか?
これは、パネルに追加された順序でコンポーネントを取得するようです
Component[] comps = myJPanel.getComponents();
JPanel に追加された順序ではなく、JPanel に表示される順序 (左上から右下) に従って JPanel 内のコンポーネントのリストを取得する方法はありますか?
これは、パネルに追加された順序でコンポーネントを取得するようです
Component[] comps = myJPanel.getComponents();
以前に提出された解決策は独創的でしたが、私の要件のほとんどを (全体的に) 満たす方法はかなり単純化されており、ウィンドウ アーキテクチャの左上にゼロ-ゼロ (ルート) ポイントがあることに依存しています。
正確なコーディングは、使用するライブラリによって異なるため、その後のプロセスをヒューリスティックに説明します。
任意の点の原点からの距離(x,y)
は です(x^2 + y^2)**(0.5)
。これを使用して、各ペアを単一の数値でミラーリングするシャドウ配列を構築できます。これらの距離のそれぞれについて関係昇順ソートを行うだけで、左上から右下への順序のかなり適切な近似値に到達できます。
回避すべき(または少なくとも理解すべき)病的な例がいくつかあります。たとえば、コンパスを画面の左上の頂点に合わせて使用すると、原点からまったく同じ距離に無数の点が生成されます。
これに対処するには、x
またはy
値を乗数で単純にプリスケールしてから、それを 2 乗して、説明したように 2 乗された他の単位と組み合わせます。これにより、必要に応じて、ウィンドウの左端に近い"y"
より高いに比例して大きな値が与えられます。また、必要に応じてその逆も行われます。x