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();
}
});
}
}