Java 杰帕内尔挫折

Java 杰帕内尔挫折,java,swing,jpanel,setbounds,Java,Swing,Jpanel,Setbounds,我正在尝试将一个JPanel添加到另一个JPanel,并将其放置在第一个JPanel上的特定位置。我使用的是setBounds(x,y,w,h)。现在我知道我不应该这样做,但我需要一种方法来移动它(作为动画) 我遇到的问题是Y不起作用。如果我执行getBounds()操作,则会将其设置为正确的值,但不会在屏幕上移动。我确实将布局设置为null 第一个JPanel: public WarehousePanel() { super(null); gantries = new Gan

我正在尝试将一个
JPanel
添加到另一个
JPanel
,并将其放置在第一个
JPanel
上的特定位置。我使用的是
setBounds(x,y,w,h)
。现在我知道我不应该这样做,但我需要一种方法来移动它(作为动画)

我遇到的问题是Y不起作用。如果我执行
getBounds()
操作,则会将其设置为正确的值,但不会在屏幕上移动。我确实将
布局设置为
null

第一个
JPanel

public WarehousePanel()
{
    super(null);

    gantries = new Gantry[5];

    for (int i = 0; i < gantries.length; i++)
    {
        gantries[i] = new Gantry(3);
        add(gantries[i]);
        System.out.println(gantries[i].getY());
        gantries[i].setBounds(15 * (i + 1), 100, 10, 50);
        System.out.println(gantries[i].getBounds());
    }
}'
public Gantry(int y)
{
    this.y = y;

    packageY = new ArrayList();

    setBackground(Color.red);
    setPreferredSize(new Dimension(10, 50));
}

谢谢。

< P>也许考虑使用未装饰的?这会做你想让它做的事,而不那么麻烦。此外,通常认为使用setBounds而不是布局管理器是个坏主意

如果您完全确定要这样做,那么您确定要调用组件类的重绘方法吗

最后,您确定父JPanel的大小足以容纳子组件上的setBounds调用吗


正确,屏幕上的Y仍然显示为5

这表明您仍在使用面板的默认FlowLayout

如果我执行getBounds(),它将被设置为正确的值rk

是,但您在分配值后立即显示该值。那不会告诉你任何事情。在框架可见后,需要显示边界。使框架可见将调用布局管理器

因此,请仔细检查以确保您使用的是空布局


如果这没有帮助,那么发布你的文章,说明问题所在。因此,创建一个JFrame并将布局设置为null。然后创建一个JPanel,设置其边界和背景,并将面板添加到框架中。向自己证明基本代码是有效的。然后确定与工作代码和您的代码有什么不同

gantry[i].立根(15*(i+1),100,10,50)Y没有改变。正确,屏幕上的Y仍然显示为5。我的意思是我看不到你们在移动Y坐标。另外,如果你想看动画,你可能需要添加像Thread.sleep(毫秒)这样的延迟。如果不添加延迟,则只会看到最后一个值,而不会看到for循环中的值发生变化。您的屏幕仅在循环后呈现jframe。如果您正在尝试进行2D图形,可能值得研究java2D/Graphics2D:。这取决于您要做什么,它可能更适合您的需要。谢谢您的想法,但这段代码要做的只是放置
JPanel
。它是用来初始化的。但是如果这部分不起作用,动画(仍然需要编程)也不会起作用。