使用GridBagLayout使组件跨越多行
问题描述:
我想使蓝色组件填充白色间隙。我试图使用gridheight = 2并没有发生任何事情。我看到的方式是有三个单元格,我希望组件扩展到第四个不存在的单元格。我怎样才能解决它?使用GridBagLayout使组件跨越多行
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUIFrame extends JFrame
{
public GUIFrame(String title)
{
super(title);
}
public void init()
{
setLayout(new GridBagLayout());
GridBagConstraints gbConstraints = new GridBagConstraints();
DisplayPanel display = new DisplayPanel();
ControlPanel control = new ControlPanel();
GalleryPanel gallery = new GalleryPanel();
gbConstraints.gridx = 0;
gbConstraints.gridy = 0;
gbConstraints.weightx = 0.8;
gbConstraints.weighty = 0.75;
gbConstraints.fill=gbConstraints.BOTH;
add(display,gbConstraints);
gbConstraints.gridx = 1;
gbConstraints.gridy = 0;
gbConstraints.weightx = 0.2;
gbConstraints.weighty = 0.75;
gbConstraints.fill=gbConstraints.BOTH;
add(gallery,gbConstraints);
gbConstraints.gridx = 0;
gbConstraints.gridy = 1;
gbConstraints.weightx = 1;
gbConstraints.weighty = 0.3;
gbConstraints.fill=gbConstraints.BOTH;
add(control,gbConstraints);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(1600,900);
setVisible(true);
}
}
答
的调整标准是简单的:
Grid Height = 1
-----------------------
| 0.7 width | 0.3 |-----> Grid Height = 2
| 0.7 height | w |
----------------| 1.0 |
| 0.7 w 0.3 h | h |
-----------------------
|
Grid Height = 1
这里是一个工作示例:
import java.awt.*;
import javax.swing.*;
public class GridBagLayoutExample {
private final int hGap = 5;
private final int vGap = 5;
private GridBagConstraints gbc;
public GridBagLayoutExample() {
gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
gbc.insets = new Insets(hGap, vGap, hGap, vGap);
}
private void displayGUI() {
JFrame frame = new JFrame ("GridBagLayout Example");
frame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = getPanel (Color.WHITE);
contentPane.setLayout (new GridBagLayout());
JPanel blackPanel = getPanel (Color.BLACK);
addComp (contentPane, blackPanel, 0, 0, 1, 1
, GridBagConstraints.BOTH, 0.7, 0.7);
JPanel grayPanel = getPanel (Color.GRAY);
addComp (contentPane, grayPanel, 0, 1, 1, 1
, GridBagConstraints.BOTH, 0.7, 0.3);
JPanel bluePanel = getPanel (Color.BLUE);
addComp (contentPane, bluePanel, 1, 0, 1, 2
, GridBagConstraints.BOTH, 0.3, 1.0);
frame.setContentPane (contentPane);
frame.pack();
frame.setLocationByPlatform (true);
frame.setVisible (true);
}
private void addComp(JPanel panel, JComponent comp
, int x, int y, int gWidth
, int gHeight, int fill
, double weightx, double weighty) {
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = gWidth;
gbc.gridheight = gHeight;
gbc.fill = fill;
gbc.weightx = weightx;
gbc.weighty = weighty;
panel.add(comp, gbc);
}
private JPanel getPanel (Color bColor) {
JPanel panel = new JPanel();
panel.setOpaque (true);
panel.setBackground (bColor);
return panel;
}
public static void main (String [] args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
new GridBagLayoutExample().displayGUI();
}
};
EventQueue.invokeLater (runnable);
}
}
我使用的GridBagConstraints对象 –