3

コードは次のとおりです。

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

public class TestGrid {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Colored Trails");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(4, 9));
        panel.setMaximumSize(new Dimension(9*30-20,4*30));

        JButton btn;
        for (int i=1; i<=4; i++) {
            for (int j=1; j<=4; j++) {
                btn = new JButton();
                btn.setPreferredSize(new Dimension(30, 30));
                panel.add(btn);
            }

            btn = new JButton();
            btn.setPreferredSize(new Dimension(30, 10));
            panel.add(btn);

            for (int j=1; j<=4; j++) {
                btn = new JButton();
                btn.setPreferredSize(new Dimension(30, 30));
                panel.add(btn);
            }

        }
        mainPanel.add(panel);
        frame.add(mainPanel);

        frame.setSize(450,950);
        frame.setVisible(true);
    }
}

4行9列のボタンのテーブルがあると思います。また、中央の列は他の列よりも狭くする必要があります。試してみましたがDimension(30, 10)Dimension(30, 10)どちらも中央の列の幅には影響しません。なんで?

4

3 に答える 3

9

レイアウトマネージャーは、希望するサイズを自由に無視できます。具体的にGridLayoutは、グリッド内の各セルを常に正確に同じサイズにします(そのため、かなり役に立たないレイアウトマネージャーです)。

ネストされたBoxLayoutものや。など、別のレイアウトマネージャーを使用する必要がありますGroupLayout

于 2010-03-30T14:48:22.070 に答える
2

GridLayoutは、すべてのセルが同じサイズであるという点で非常に柔軟性がなく、通常、グリッドに追加されたオブジェクトの最大の高さと幅の設定を尊重します。

行や列のサイズを変える必要がある場合は、GridBagLayoutを使用する必要があります。

于 2010-03-30T14:49:05.460 に答える
-2

setPreferredSize寸法を使用して寸法を設定するまで、ボタンのサイズは変更されません。

例:-

Dimension dim = new Dimension(20,20), then use setPerferredSize(dim).

于 2011-05-01T17:08:58.410 に答える