我是 GridBagLayout 的新手,但我尝试使用我能找到的标准约定,即在一张网格纸上画出我的想法,然后尝试将网格值转换为 gridbag ......
我的目标是使布局如下所示:
它目前看起来像这样:
知道为什么吗?
如果您认为左上角为 0,0 的网格,我正在寻找的确切尺寸
- 目标图片中的红色面板:从第 0 列开始,跨越 10 列,高度为 1 行
- 对于黑色面板:从第 0 列第 1 行开始,跨越 10 列,高度为 20 行
- 对于蓝色面板:从第 0 列第 21 行开始,跨越 10 列,高度为 1
- 对于绿色列:从第 10 列第 0 行开始,跨越 16 列,高度为 7
- 对于紫色列:从第 10 列第 7 行开始,跨越 16 列,高度为 16
这是我的源代码:
GBC 是一个扩展 GridBagConstraints 的辅助类,使用的构造函数是
GBC(int 起始X,int 起始Y,int 宽度,int 高度)
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.Rectangle;
import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Demo extends JApplet
{
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel4 = new JPanel();
JPanel panel5 = new JPanel();
public void init()
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
initComponents();
}
});
}
public void initComponents()
{
//set the layout of the content pane to gridbag layout
GridBagLayout gridBag = new GridBagLayout();
getContentPane().setLayout(gridBag);
Rectangle rect = getContentPane().getBounds();
panel1.setBackground(Color.green);
panel2.setBackground(Color.black);
panel3.setBackground(Color.red);
panel4.setBackground(Color.orange);
panel5.setBackground(Color.yellow);
add(panel4, new GBC(10, 0, 16, 7).setFill(GBC.BOTH).setWeight(1.0, 1.0));
add(panel1, new GBC(0, 0, 10, 1).setFill(GBC.BOTH).setWeight(1.0, 1.0));
add(panel3, new GBC(0, 21, 10, 1).setFill(GBC.BOTH).setWeight(1.0, 1.0));
add(panel2, new GBC(0, 1, 10, 20).setFill(GBC.BOTH).setWeight(1.0, 1.0));
add(panel5, new GBC(10, 7, 16, 16).setFill(GBC.BOTH).setWeight(1.0, 1.0));
}
}
任何帮助将不胜感激(但请解释您的逻辑)