免責事項:これは具体的な回答として提供されているのではなく、SSCCEの有用性のポイントを証明するために提供されています...
GridLayout
コンストラクターはGridLayout(int rows,int cols)
(@AndrewThompsonが彼の回答で言ったように、私が言及する理由は、の行/列のパラメーターを混同した可能性があるようですLayoutManager
)です。したがって4,0
、4行と可変量の列が得られます。
4つのラベルを追加すると、4つの行と1つの列が得られます(予想どおり)。
5つのラベルを追加すると、3つの行と2つの列があり、最後の1つを除いてそれぞれ2つのアイテムがあります。
IMOは、GridLayout
列/行の数> 0(0未満で、LayoutManagerが量を計算する)を尊重する必要があると予想されます。したがって、許可されている行よりも多くのコンポーネントを追加すると、新しい列> 0が作成されますが、0および1として>1も作成されます。同じことを実行します。したがって、4x0のグリッドを5つのコンポーネントで埋めると、2つの列が作成されます。各行に2つのコンポーネントがあり(各列に対して)、残りが最後の行(コンポーネントの量によっては必ずしも最後の行である必要はありません)にあると予想されます。 8は、現在の4x2のように最後の行まで埋めますが、9つのコンポーネントを追加するとGridLayout
、4x3のaが発生します-新しい行に移動する前に、行のすべての列を埋めます)
問題を再現するSSCCEを投稿してください。そうしないと、ここで推測しているのは、私が作成した例であり、あなたが言った/取得したものとは異なる動作を示します。
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
public class Test {
public Test() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
GridLayout layout = new GridLayout(4, 0);
frame.setLayout(layout);
for (int i = 0; i < 5; i++) {
frame.add(new JLabel(String.valueOf(i + 1)));
}
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Create Swing components on EDT
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Test();
}
});
}
}