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