0

私が受け取った答えのために、私は今これを別の方法でやっています。

setPreferredSize() および getPreferredSize() をオーバーライドして、実際にコンポーネントのサイズを実際に入力された数値よりも大きい数値に設定し、実際よりも小さい数値を取得する方法はありますか?

ここでは、パネルのサイズを setPreferredSize() に実際に入力したサイズよりも 100 ピクセル大きく設定するために両方のメソッドをオーバーライドしています。希望のサイズを取得する場合は、setPreferredSize() に入力した値を返すようにします。

Swing が getPreferredSize() を使用してサイズを設定していると思われますが、これを達成するためにオーバーライドできる別のメソッドはありますか、それとも別のメソッドを作成して必要な値を返す必要がありますか?

import java.awt.*;
import java.beans.Transient;
import javax.swing.*;

public class PreferredSize extends JPanel{

public static void main(String[] args) {
    JPanel background = new JPanel();

    PreferredSize ps = new PreferredSize();
    ps.setPreferredSize(new Dimension(200, 200));
    ps.setBackground(Color.CYAN);

    JPanel panel = new JPanel();
    panel.setBackground(Color.BLUE);
    panel.setPreferredSize(new Dimension(200, 200));


    background.add(ps);
    background.add(panel);

    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setContentPane(background);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
}


@Override
public void setPreferredSize(Dimension preferredSize) {
    super.setPreferredSize(new Dimension(preferredSize.width+100, preferredSize.height+100));
}

@Override
@Transient
public Dimension getPreferredSize() {
    return new Dimension(super.getPreferredSize().width-100, super.getPreferredSize().height-100);
}
}

ありがとう。

4

1 に答える 1

4

あなたが直面している問題は、優先サイズは、レイアウト マネージャーがコンポーネントのレイアウト方法を決定するために使用できるガイドにすぎないという事実です。レイアウト マネージャーがこれらのヒントを無視することはまったく理にかなっています。

ip の場合、あなたの例;

  1. a のデフォルト サイズJPanelは 0x0 であるため、100 ピクセルを加算して減算すると、再び 0x0 になります。
  2. a のデフォルトのレイアウト マネージャーは ですJFrameBorderLayout使用可能なサイズが優先サイズで指定されたサイズよりも大きいか小さい場合、優先サイズは無視されます。

本当の問題は、実際に何を達成しようとしているのかということです。

于 2013-03-09T08:05:14.947 に答える