swing
グリッドレイアウト
サーチ…
GridLayoutのしくみ
GridLayout
は、セルサイズが等しいグリッド内にコンポーネントを配置するレイアウトマネージャです。次の方法を使用して、行数、列数、水平間隔、垂直間隔を設定できます。
-
setRows(int rows)
-
setColumns(int columns)
-
setHgap(int hgap)
-
setVgap(int vgap)
または次のコンストラクタを使用してそれらを設定できます。
-
GridLayout(int rows, int columns)
-
GridLayout(int rows, int columns, int hgap, int vgap)
行数または列数が不明な場合は、それぞれの変数を0
設定できます。例えば:
new GridLayout(0, 3)
これにより、 GridLayout
は3列と必要な数の行を持ちます。
次の例は、 GridLayout
が行、列、水平方向のギャップ、垂直方向のギャップ、および画面サイズの異なる値を持つコンポーネントをどのようにレイアウトするかを示しています。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.WindowConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class GridLayoutExample {
private GridLayout gridLayout;
private JPanel gridPanel, contentPane;
private JSpinner rowsSpinner, columnsSpinner, hgapSpinner, vgapSpinner;
public void createAndShowGUI() {
gridLayout = new GridLayout(5, 5, 3, 3);
gridPanel = new JPanel(gridLayout);
final ChangeListener rowsColumnsListener = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
gridLayout.setRows((int) rowsSpinner.getValue());
gridLayout.setColumns((int) columnsSpinner.getValue());
fillGrid();
}
};
final ChangeListener gapListener = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
gridLayout.setHgap((int) hgapSpinner.getValue());
gridLayout.setVgap((int) vgapSpinner.getValue());
gridLayout.layoutContainer(gridPanel);
contentPane.revalidate();
contentPane.repaint();
}
};
rowsSpinner = new JSpinner(new SpinnerNumberModel(gridLayout.getRows(), 1, 10, 1));
rowsSpinner.addChangeListener(rowsColumnsListener);
columnsSpinner = new JSpinner(new SpinnerNumberModel(gridLayout.getColumns(), 1, 10, 1));
columnsSpinner.addChangeListener(rowsColumnsListener);
hgapSpinner = new JSpinner(new SpinnerNumberModel(gridLayout.getHgap(), 0, 50, 1));
hgapSpinner.addChangeListener(gapListener);
vgapSpinner = new JSpinner(new SpinnerNumberModel(gridLayout.getVgap(), 0, 50, 1));
vgapSpinner.addChangeListener(gapListener);
JPanel actionPanel = new JPanel();
actionPanel.add(new JLabel("Rows:"));
actionPanel.add(rowsSpinner);
actionPanel.add(Box.createHorizontalStrut(10));
actionPanel.add(new JLabel("Columns:"));
actionPanel.add(columnsSpinner);
actionPanel.add(Box.createHorizontalStrut(10));
actionPanel.add(new JLabel("Horizontal gap:"));
actionPanel.add(hgapSpinner);
actionPanel.add(Box.createHorizontalStrut(10));
actionPanel.add(new JLabel("Vertical gap:"));
actionPanel.add(vgapSpinner);
contentPane = new JPanel(new BorderLayout(0, 10));
contentPane.add(gridPanel);
contentPane.add(actionPanel, BorderLayout.SOUTH);
fillGrid();
JFrame frame = new JFrame("GridLayout Example");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setContentPane(contentPane);
frame.setSize(640, 480);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private void fillGrid() {
gridPanel.removeAll();
for (int row = 0; row < gridLayout.getRows(); row++) {
for (int col = 0; col < gridLayout.getColumns(); col++) {
JLabel label = new JLabel("Row: " + row + " Column: " + col);
label.setHorizontalAlignment(JLabel.CENTER);
label.setBorder(BorderFactory.createLineBorder(Color.GRAY));
gridPanel.add(label);
}
}
contentPane.revalidate();
contentPane.repaint();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new GridLayoutExample().createAndShowGUI();
}
});
}
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow