我遇到了格子袋布局的问题,我试图将图像水平放置在一条线上,但是当我将图像添加到原始图像的左侧时,它会垂直向下而不是水平移动到剩下。
我试图将gridY指定为相同,但是这不起作用,我也尝试了GridBayConstarints.Horizontal,但这无关紧要。
到目前为止我已经
了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]全部在一行。
答案 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-上面列出的解决方案仅适用于以下模式添加对象:左,右,左,右......或右,左,右,左...... (这是一个快速的解决方案,但你会发现你的解决方案只是想......)
希望,这对你有帮助,如果你有任何疑问,不要介意评论,我可以提供帮助:)