【问题标题】:gridbag layout GUI网格包布局 GUI
【发布时间】:2015-08-05 12:22:35
【问题描述】:

我的网格包布局有问题,我试图让图像水平排在一条线上,但是当我将图像添加到原始图像的左侧时,它会垂直下降而不是水平下降到左边。

我尝试将 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] 都在一行中。

【问题讨论】:

    标签: java gridbaglayout


    【解决方案1】:

    你用来把东西放在右边的代码是正确的,但是由于 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 列,因为您只能添加或退出 1 到 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-我不鼓励使用

    c.gridy = c.gridy;
    

    如果您只打算使用该循环在一行中添加内容,则最好使用:

    c.gridy = 0;
    

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

    3- 上面列出的解决方案仅在使用以下模式添加对象时才有效:左、右、左、右...或右、左、右、左... (这是一个快速的解决方案,但您会发现您的解决方案只是想想......)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 2011-06-14
      • 2023-04-04
      • 1970-01-01
      • 2011-10-28
      • 2013-04-24
      相关资源
      最近更新 更多