だいたいが、レイアウト苦手です。

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に頼らない作り方もできるがそれこそ、ウィンドウの大きさの変化には全く追随してこない。

エライこっちゃがな。

たったこれだけ作るのに

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の大きさを変えても追随してくる。

しかし、ここに部品を更に乗っけることを考えるとうんざりだ。

本書は、ほとんどがJTableの説明に終始するが、後半、

Swingの持つ弱さに果敢に切り込む。

LayoutManager2をimplementsして新たにレイアウト用のクラスを自作する。

これがGridLayoutの持つ「固定になってしまう」弱さをカバーしてくれる。

でもまぁ、これからSwingでもないのかも知れませんが。。

相当古い本ですが、中古で手に入るみたいですよ、Amazonとかで。安いです。

著者はすでにJavaFXの著作もしておられます。

JavaGUIやるなら、この方の著作は持っていたほうがいいかも。

JavaFXではConstraintsを使って行やカラムのパーセントによる表示指定が、出来るっぽい。

あと、CSS指定によるイメージ表示なんてのもある。

進化してますね。

でも、レイアウト、やっぱりきらい。#レイアウト