だいたいが、レイアウト苦手です。
WEBでもね、同じ。
Swingの後に出てきたJavaFXを見ても、どうなんでしょ。
どのみち、絵心が欠片もなく、道具立てがどう変わろうが、苦しいに決まってる。
Swingは基本、Layout Managerってやつを組み合わせてレイアウトします。
BorderLayout
FlowLayout
GridLayout
GridBagLayout
みたいのを使ってレイアウトしますが、こいつら、Swingではないんですね。AWTです。
それぞれ、非常にざっくりした性格を持っていて、まー言うなれば使い勝手が、よろしくはない。
BorderLayoutはざっくりとNorth,West,Center,East,Southの
5つの領域にWindowなりPanelなりを分ける。
FlowLayoutは横並び。
GridLayoutやGridbagLayoutは一見便利そうだが、配置が固定化してしまう。
更に各部品のsetBoundsを使ってLayout Managerに頼らない作り方もできるがそれこそ、ウィンドウの大きさの変化には全く追随してこない。
エライこっちゃがな。
![](http://o2-create.co.jp/storage/2019/07/popo.jpg)
たったこれだけ作るのに
BorderLayout
FlowLayout
GridLayout
を駆使せねばならぬ。
————————————————–
JFrame frame = new JFrame(“個人メール”);
frame.getContentPane().setLayout(new BorderLayout());
frame.setBounds(100, 100, 1000, 800);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MailAction action = new MailAction(this);
JLabel label = new JLabel();
label.setText(“あなたの性別:”);
ButtonGroup group = new ButtonGroup();
JRadioButton radio1 = new JRadioButton(“男性”);
JRadioButton radio2 = new JRadioButton(“女性”);
radio1.addActionListener(action);
radio2.addActionListener(action);
group.add(radio1);
group.add(radio2);
msg = new JLabel();
msg.setText(“あなたは男性、女性、どちらですか?”);
JPanel topP = new JPanel();
topP.setLayout(new FlowLayout());
topP.add(label);
topP.add(radio1);
topP.add(radio2);
topP.add(msg);
frame.getContentPane().add(topP,”North”);
//以下に最下部のボタンを追記
JButton btn1 = new JButton(“送信”);
JButton btn2 = new JButton(“破棄”);
JPanel botomP = new JPanel();
botomP.setLayout(new FlowLayout());
botomP.add(btn1);
botomP.add(btn2);
frame.getContentPane().add(botomP, “South”);
//ここまで
//Center部分の部品配置準備
JPanel centerP = new JPanel();
centerP.setLayout(new GridLayout(2,1));
JPanel chakushinP = new JPanel();
chakushinP.setBackground(Color.BLUE);
JPanel henshinP = new JPanel();
henshinP.setBackground(Color.ORANGE);
centerP.add(chakushinP);
centerP.add(henshinP);
frame.getContentPane().add(centerP, “Center”);
//ここまで
frame.setVisible(true);
—————————————————-
※MailActionクラス端折ってます。
こんなに書かねばならぬのだ。
手間をかけた分、Windowの大きさを変えても追随してくる。
しかし、ここに部品を更に乗っけることを考えるとうんざりだ。
![](http://o2-create.co.jp/storage/2019/07/swing.jpg)
本書は、ほとんどがJTableの説明に終始するが、後半、
Swingの持つ弱さに果敢に切り込む。
LayoutManager2をimplementsして新たにレイアウト用のクラスを自作する。
これがGridLayoutの持つ「固定になってしまう」弱さをカバーしてくれる。
でもまぁ、これからSwingでもないのかも知れませんが。。
相当古い本ですが、中古で手に入るみたいですよ、Amazonとかで。安いです。
著者はすでにJavaFXの著作もしておられます。
JavaGUIやるなら、この方の著作は持っていたほうがいいかも。
JavaFXではConstraintsを使って行やカラムのパーセントによる表示指定が、出来るっぽい。
あと、CSS指定によるイメージ表示なんてのもある。
進化してますね。
でも、レイアウト、やっぱりきらい。#レイアウト