3

から追加JLabelする方法はGridLayout? 私は8x8のグリッドレイアウトを持っています。

Container content = getContentPane();
content.setLayout(new GridLayout(8, 8,2,2));
for (int f = 0; f < btnArr.length; f++){
    for (int s = 0; s < btnArr.length; s++){
        btnArr[f][s] = new JButton();
        btnArr[f][s].addActionListener(this);
        content.add(btnArr[f][s]);
        btnArr[f][s].setBackground(randomColor());
    }
}
4

1 に答える 1

9

SimpleNestedLayout

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

class SimpleNestedLayout {

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                JPanel gui = new JPanel(new BorderLayout(5,5));

                int sz = 4;
                Container content = new JPanel(new GridLayout(sz, 0, 2, 2));
                for (int f=0; f<sz*sz; f++) {
                    content.add(new JButton());
                }
                gui.add(content, BorderLayout.CENTER);

                Container info = new JPanel(
                        new FlowLayout(FlowLayout.CENTER, 50, 5));
                info.add(new JLabel("Flow"));
                info.add(new JLabel("Layout"));
                gui.add(info, BorderLayout.PAGE_START);

                gui.add(new JLabel("Label"), BorderLayout.LINE_END);

                JOptionPane.showMessageDialog(null, gui);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

ノート

  • 8x8グリッドの場合は、8に変更szします。
  • 言及されている「ラベル」がGUIに表示されるラベルのようなものである場合、それは外側のBorderLayout場所Flow Layout(それ自体がパネル)に配置されるか、最も外側のパネル Labelの他の2つの空の位置のいずれかに表示される可能性があります。gui
  • infoFlowLayout)とcontent( )の両方のGridLayoutパネルは、必要に応じてより多くのコンポーネントを受け入れることもできます。
  • 他のネストされたレイアウトの簡単な例。
    1. PlayerGui(31 LOC)
    2. WestPanel(30 LOC)単にインスタンスを保持するのではなく、短いので、良い例ではありません。extends JPanel
    3. AmortizationLayout(53 LOC)タイトル付きの境界線を使用して親と子のレイアウトの概要を示しているため、例として特に便利です。
于 2013-01-26T16:30:11.763 に答える