1

Swing をいじってみると、GridLayout が 10 行 10 列として定義されているのに、次のコードが 3 列のように見えるレイアウトを構築するのはなぜだろうか?

この異常な動作と、提供されたコードの何がこれを引き起こしているのか、誰でも説明できますか?

public class MyGrid {

    public static void main (String[] args) {
        JFrame frame = new JFrame();
        Container container = frame.getContentPane();
        container.setLayout(new GridLayout(10,10));
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                if (i>=j) {
                    container.add(new JButton("X"));
                } else {
                    container.add(new JLabel("Y"));
                }
            }
        }
        frame.setSize(500,500);
        frame.setVisible(true);
    }

}
4

2 に答える 2

4

GridLayout:のクラスjavadocを参照してください。

コンストラクターまたはsetRowsおよびsetColumnsメソッドのいずれかによって、行数と列数の両方がゼロ以外の値に設定されている場合、指定された列数は無視されます。代わりに、列の数は、指定された行数とレイアウト内のコンポーネントの総数から決定されます。したがって、たとえば、3行2列が指定され、9つのコンポーネントがレイアウトに追加された場合、それらは3列3行として表示されます。列数の指定は、行数がゼロに設定されている場合にのみレイアウトに影響します。

このコードを使用する場合

public class MyGrid {

  public static void main (String[] args) {
    JFrame frame = new JFrame();
    Container container = frame.getContentPane();
    container.setLayout(new GridLayout(10,10));
    for ( int i =0; i < 100; i++ ){
      container.add( new JLabel( ""+i ) );
    }
    frame.setSize(500,500);
    frame.setVisible(true);
  }

}

10行10列が表示されます。i < 50たとえば、forループで使用すると、列の数が変わります。

于 2012-04-21T11:53:00.030 に答える
2
import java.awt.*;
import javax.swing.*;

public class MyGrid {

    public static void main (String[] args) {
        JFrame frame = new JFrame();
        Container container = frame.getContentPane();
        container.setPreferredSize(new Dimension(500,500));
        container.setLayout(new GridLayout(10,10));
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                if (i>=j) {
                    container.add(new JButton("X"));
                } else {
                    container.add(new JLabel("Y"));
                }
            }
        }
        //frame.setSize(500,500);
        frame.pack();
        frame.setVisible(true);
    }

}

元のコードは、100用に設計されたコンテナに25個のコンポーネントを入れていました。奇妙に見えることを期待してください。

于 2012-04-21T11:52:51.243 に答える