Java 使用getLocation()获取不正确的位置

Java 使用getLocation()获取不正确的位置,java,swing,components,label,Java,Swing,Components,Label,我尝试了很多方法来查找组件的位置,它们要么出现错误,要么显示为零,要么位置不正确。我尝试过getX()和x、getBounds.getLocation、getLocation、getLocationOnScreen、layout.getComponent(1)或l1。如何找到组件的位置?我试图用一个矩形来包围图像,我如何完成定位呢?我用边框而不是矩形来回答这个问题。谢谢你,垃圾上帝 如果你正在阅读这篇文章来回答一个问题,请看上面的评论。如果你没有得到一个体面的答案,请考虑创建和发布一个小的可编译

我尝试了很多方法来查找组件的位置,它们要么出现错误,要么显示为零,要么位置不正确。我尝试过getX()和x、getBounds.getLocation、getLocation、getLocationOnScreen、layout.getComponent(1)或l1。如何找到组件的位置?我试图用一个矩形来包围图像,我如何完成定位呢?

我用边框而不是矩形来回答这个问题。谢谢你,垃圾上帝


如果你正在阅读这篇文章来回答一个问题,请看上面的评论。

如果你没有得到一个体面的答案,请考虑创建和发布一个小的可编译和可运行的程序,我们可以运行,这将为我们展示你的问题。此外,在发布代码时,请使用一致且易于阅读的缩进。理解其他人的代码非常困难,因此您不想让代码缩进变得杂乱无章,从而使我们更难理解。另外,让我们确保您了解组件的位置是相对于其容器的。因此l2的位置将相对于容纳它的布局容器,我猜这是因为侦听器被添加到了一个不同于您预期的组件中。要获得比猜测更好的信息,请遵循@HovercraftFullOfEels的建议。在调用
validate()
pack()
之前,布局位置无效。在附件组件上也考虑<代码> SETBOLDER()/<代码>垃圾,谢谢!我没想到这个主意!
public Textures()
{
    super(new GridBagLayout());
    layout.add(l1);
    layout.add(l2);
    add(layout);
    String[] T = filerw.fileRead2();
    if(T[0].equals("11"))
    {
        rect1.setLocation(layout.getComponent(1).getBounds().getLocation());
    }
    if(T[0].equals("12"))
    {
rect1.setLocation(layout.getComponent(2).getBounds().getLocation());
    }
    l1.addMouseListener(new MouseAdapter()
    {
        public void mousePressed(MouseEvent arg0)
        {
            a = 11;
            filerw.fileWrite();
    rect1.setLocation(l1.getBounds().getLocation().x, l1.getBounds().getLocation().y);
        }
    });
    l2.addMouseListener(new MouseAdapter()
    {
        public void mousePressed(MouseEvent arg0)
        {
            a = 12;
            filerw.fileWrite();
    rect1.setLocation(l2.getBounds().getLocation().x, l2.getBounds().getLocation().y);
    repaint();
        }
    });