0

パネルには3種類あり、それぞれが異なる数のグリッドにまたがっています。1 * 3、1 * 1、3*1。

add(panel1, "span 1 3,push, grow");
add(panel2, "push, grow");
add(panel3, "span 3 1,push, grow");

画面上の他のパネルと重なる場合、最初のパネルの制約を「スパン12」に変更したいと思います。しかし、それが別のパネルと重なっているかどうかを調べるには、その境界を知る必要があります。

サイズの制約は設定していません。

「パネル/コンポーネントが実際に表示される前の境界」を知る方法はありますか?

また、MigLayoutマネージャーによって設定された行と列の長さを知る方法は?

実際、私はこれらの異なるサイズのパネルで全画面をカバーしたいと思います。

編集 :

主犯に入るのを忘れた...add(lastPanel, span, push, grow)

さまざまなサイズのパネルで全画面をカバーしようとしています。このコードは、偶数の長方形に対しては機能しますが、奇数に対しては機能しません。それらの数が奇数の場合、最後のグリッドは常に空のままになります。そのため、最後のパネルをスパンして、使用可能な空きスペースをすべてカバーしましたが、3*1パネルとオーバーラップしました。

4

3 に答える 3

1

JPanel(デフォルトではすべての に対して有効) は、2 つのケースでそのまたはをSwing JComponents返しますSizeBounds

  1. 一度画面に表示される場合

  2. の後pack()Top-Level Container

Standard LayoutManagers、または MigLayout について、この値を知る理由はありません。

于 2012-08-11T01:23:48.397 に答える
1

私はいくつかの方法を考えることができますが、あまり良くも美しくもなく、すべて同じ問題に苦しんでいます。

レイアウトは、連続して繰り返し発生する可能性があります (つまり、コンテナーをすばやく連続してレイアウトするための多数の要求が殺到します)。

トラップはいつ停止するかを把握しようとしています。次の問題は、自分が引き起こしたときにわかります。

Container親のdoLayoutメソッドをオーバーライドすることができます。呼び出した後super.doLayout、結果のレイアウトにアクセスできます。これは、実装したくない可能性のある を実装する必要があるため、最適なソリューションではContainerありません。

私が考えることができる他の解決策は、イベントを監視するComponentListeneronを使用することです。panel1componentResized

私は真剣にこれらをいじって、あなたがどんな問題に巻き込まれているかを見ていきます. より良い解決策は、レイアウトの問題を事前に解決することです。

于 2012-08-10T21:39:07.400 に答える
1

同じような問題が再び発生しましたが、今回は答えが得られました。誰かの役に立つかもしれないので、ここに投稿します。

addAncestorListener(new AncestorListener() {
        @Override
        public void ancestorAdded(AncestorEvent event) {
                height = getHeight();
                width = getWidth();
                //Modifications to the components here.
        }

コンパイル時に LayoutManager によって設定された寸法が必要でした (これは可能ではありませんでした)。コンポーネントが画面に配置されるとすぐに、AncestorListener がそのトリックを実行しました。寸法を取得し、それに応じてコンポーネントを修正します。

于 2012-08-20T08:52:11.577 に答える