Java 网格布局图形用户界面

Java 网格布局图形用户界面,java,gridbaglayout,Java,Gridbaglayout,我在gridbag布局上遇到了问题,我试图使图像水平放置在一行上,但是当我将图像添加到原始图像的左侧时,图像将垂直向下,而不是水平向左 我试着将gridY指定为相同的,但是这不起作用,我也试过GridBayConstarints。然而,这是不相关的 到目前为止我有 import java.awt.GridBagConstraints; import javax.swing.ImageIcon; import javax.swing.JLabel; public class main {

我在gridbag布局上遇到了问题,我试图使图像水平放置在一行上,但是当我将图像添加到原始图像的左侧时,图像将垂直向下,而不是水平向左

我试着将gridY指定为相同的,但是这不起作用,我也试过GridBayConstarints。然而,这是不相关的

到目前为止我有

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++;
        }
    }



}
导入java.awt.gridbag约束;
导入javax.swing.ImageIcon;
导入javax.swing.JLabel;
公共班机{
公共静态void main(字符串[]args)
{
GUI g=新GUI();
int转辙机=1;

对于(int i=0;i您用于将内容向右放置的代码是正确的,但是由于gridx的默认值为0,当您尝试将组件添加到左侧时,您所做的是给gridx一个-1的值,对于gridx,一个不正确的值,似乎问题就在这里

我现在可以给出的解决方案是,制作一个数组,数组长度为要显示多少图像,在这种情况下,它将是:

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

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

为什么这样做?

现在,您的图像只能位于第5列或第1列(gridx=0),但不能位于-1,尽管我们还没有完成,如果您这样离开,并在“yourLenght”中添加或退出一个图像您的图像只能放在第2列或第4列,因为您只能将一个添加到或退出到3。为了避免这些,我们要做的是声明另一个int

int magicInt = 1;
然后在添加每个组件后,我们将在“magicInt”值中添加1

这样,每次添加一个对象时,都可以向左或向右移动一个位置

注意事项:

如果不给weighty一个值,1-Anchors将不起作用。您可以阅读有关这些变量的更多信息

2-我不鼓励使用

c.gridy = c.gridy;
如果您只打算使用该循环在一行上添加内容,最好使用:

c.gridy = 0;
这样你的代码更容易阅读

3-以上列出的解决方案仅在以下模式下一致添加对象时有效:左、右、左、右…或右、左、右、左。。。 (这是一个快速的解决方案,但你会找到你的解决方案,只要想想……)

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

c.gridy = 0;