gridbag布局GUI

时间:2015-08-05 12:22:35

标签: java gridbaglayout

我遇到了格子袋布局的问题,我试图将图像水平放置在一条线上,但是当我将图像添加到原始图像的左侧时,它会垂直向下而不是水平移动到剩下。

我试图将gridY指定为相同,但是这不起作用,我也尝试了GridBayConstarints.Horizo​​ntal,但这无关紧要。

到目前为止我已经

import java.awt.GridBagConstraints;

import javax.swing.ImageIcon;
import javax.swing.JLabel;


public class main {


public static void main(String[] args)
{
    GUI g = new GUI();

    int turnCounter = 1;

    for(int i = 0; i<6; i++)
    {

        String image = "src/resources/bone"+0+i+".png";
        GridBagConstraints c = new GridBagConstraints();


        //ADDS IMAGE TO THE LEFT 
        if(turnCounter%2 == 0)
        {
            c.gridy = c.gridy;
            c.gridx = c.gridx-1;
            ImageIcon icon1 = new ImageIcon(image);
            JLabel label1 = new JLabel((ImageIcon) icon1);
            g.add(label1,c);
            g.revalidate();

            turnCounter++;
        }

        //ADD IMAGES TO THE RIGHT
        else if(turnCounter%2 == 1)
        {

            c.gridy = c.gridy;
            c.gridx = c.gridx+1;
            ImageIcon icon1 = new ImageIcon(image);
            JLabel label1 = new JLabel((ImageIcon) icon1);
            g.add(label1,c);
            g.revalidate();
            turnCounter++;
        }
    }



}

}

此刻图片的样子。 [2 | 0]和[3 | 0]应该按顺序在[0 | 0]的左边,所以它看起来像这样

[4 | 0] [2 | 0] [0 | 0] [1 | 0] [3 | 0] [5 | 0]全部在一行。

Image of what it looks like at the moment

1 个答案:

答案 0 :(得分:0)

用于将内容置于右侧的代码是正确的,但由于gridx的默认值为0 ,当您尝试向左侧添加组件时,您正在执行的操作给gridx的值为-1 ,对于gridx来说,不正确的值,似乎问题就在那里。

我现在可以给出的解决方案是创建一个数组,其中包含您想要显示多少图像的数据,在这种情况下它将是:

int yourLenght = 5; //Sounds dirty lol
JLabel[] yourArray;
yourArray = new JLabel[myLenght]

在此之后,只选择要放置它的阵列的位置,我会在中间推荐它。

为什么这样做?

现在你的图片只能在第5列或第1列(gridx = 0),但不能在-1上,尽管我们尚未完成,如果你这样离开,你添加或退出一个“ yourLenght“您的图片只能放在第二列或第四列,因为您只能添加或退出一个到3.为了避免这些,我们要做的是声明另一个int。

int magicInt = 1;

然后在添加每个组件之后,我们将向“magicInt”值添加1。

//You already added the object rather on the left or on the right
magicInt++;

这样,每次添加对象时,您都可以向左或向右前进一个位置。

备注:

如果你没有赋予重量值,那么1-Anchors将不起作用。您可以阅读有关这些变量的更多信息here

2-I不鼓励使用

c.gridy = c.gridy;

如果您只想使用该循环在一行中添加内容,请更好地使用:

c.gridy = 0;

这样你的代码就更容易阅读了。

3-上面列出的解决方案仅适用于以下模式添加对象:左,右,左,右......或右,左,右,左...... (这是一个快速的解决方案,但你会发现你的解决方案只是想......)

希望,这对你有帮助,如果你有任何疑问,不要介意评论,我可以提供帮助:)