【发布时间】:2013-06-28 19:16:33
【问题描述】:
我是 GridBagLayout 的新手,但我尝试使用我可以使用的标准约定 find 是在一张网格纸上画出我的想法,然后尝试将网格值转换为 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 startingX,int startingY,int width,int height)
/*
* 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));
}
}
任何帮助将不胜感激(但请解释您的逻辑)
【问题讨论】:
-
GridBagLayout 默认情况下不会使列大小相等。列的大小基于放置在主 JPanel 上的 Swing 组件的内容。您应该首先创建 5 个 JPanel 中每个 JPanel 的内容,然后尝试将它们组合到一个带有 GridBagLayout 的主 JPanel 上。
-
那是反直觉的 xD,你会认为你想先设计布局。无论如何,谢谢你,我会试一试。
-
@GilbertLeBlanc 添加组件后它看起来仍然完全相同:(知道为什么这些行和列值不起作用吗?
-
没有SSCCE。最好是可运行的。 sscce.org
-
@nachos : 关于
Left和Right边,它们需要不同的尺寸吗?如果是,则在最后三个addComp(...)调用中对weightx值进行简单更改,对于leftPanel (smaller value)、greenPanel和magentaPanel(这两个 JPanel 的值相同但更高)。
标签: java swing layout-manager gridbaglayout