アプリ版:「スタンプのみでお礼する」機能のリリースについて

javaのswingを触っていますがsetPrefferedSizeとsetSizeの違いがよくわかりません。
ネットやAPIも見てみましたがいまいちです。
どなたか解説お願いします。(違いの分かるサンプルなどあるとうれしいです。)

A 回答 (2件)

コンテナ(JFrameやJPanel)にsetLayout()メソッドでFlowLayoutを指定すると


追加されたコンポーネントは自動的に適切なサイズで配置されます。
また、BorderLayoutを指定するとNORTHとSOUTHは高さが適切なサイズに、
WESTとEASTでは幅が適切なサイズになって配置されます。
この時のサイズを指定するのがsetPreferredSize()メソッドです。
setSize()メソッドの値は無視されます。
一方、setLayout()でnullを指定するとサイズを指定する必要があります。
この時サイズを指定するのがsetSize()メソッドになります。
setPreferredSize()メソッドの値は無視されます。

プログラムだとこんな感じですかね。
(投稿するとインデントが削除されて見にくくなるようですみません)

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

class test2 extends JFrame{
JButton btn1,btn2,btn3;
JButton btn4,btn5,btn6;

test2(){
super("SizeTest");
setSize(700,700);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JPanel p0=new JPanel();
p0.setLayout(new GridLayout(2,1));
JPanel p1=new JPanel();
//FlowLayout
p1.setLayout(new FlowLayout());
//サイズ指定なし(デフォルトの適切なサイズ)
btn1=new JButton("Button1");
p1.add(btn1);
//setSize()で指定(無視されている)
btn2=new JButton("Button2");
btn2.setSize(new Dimension(150,100));
p1.add(btn2);
//setPreferredSize()で指定
btn3=new JButton("Button3");
btn3.setPreferredSize(new Dimension(150,100));
p1.add(btn3);
p0.add(p1);
JPanel p2=new JPanel();
//レイアウトマネージャ無し
p2.setLayout(null);
//サイズ指定なし(表示されない)
btn4=new JButton("Button4");
btn4.setLocation(10,10);
p2.add(btn4);
//setSize()で指定
btn5=new JButton("Button5");
btn5.setLocation(210,10);
btn5.setSize(new Dimension(150,100));
p2.add(btn5);
//setPreferredSize()でもサイズ指定(無視されている)
btn6=new JButton("Button6");
btn6.setLocation(420,10);
btn6.setSize(new Dimension(50,50));
btn6.setPreferredSize(new Dimension(150,100));
p2.add(btn6);
p0.add(p2);
add(p0,BorderLayout.CENTER);
}

public static void main(String args[]){
test2 frame=new test2();
frame.setVisible(true);
}
}
    • good
    • 0

ケースバイケースで答えが複雑ですが、以下のURLを参照ください。


setSizeは外枠のサイズを決定するものです。(トップダウン的)
setPreferredSizeは、内側、すなわちFrameなどに配置したコンポーネントの推奨サイズを決定します。コンポーネントの最小値、最大値を決定する方法も別にあります。(ボトムアップ的)

http://expcodes.com/216079

http://docs.oracle.com/javase/jp/6/api/javax/swi …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!