-1

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

我遇到的问题是 Y 不起作用。如果我这样做getBounds(),它会设置为正确的值,但它不会在屏幕上移动。我确实有Layout设置为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());
    }
}'

第二JPanel

public Gantry(int y)
{
    this.y = y;

    packageY = new ArrayList();

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

提前致谢。

4

2 回答 2

0

也许考虑使用未装饰的JInternalFrame?这将做你想让它做的事,而不会大惊小怪。此外,使用 setBounds 而不是布局管理器通常被认为是一个坏主意。

如果您绝对确定要以这种方式做事,那么您确定要按照规范调用组件类的重绘方法吗?

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

于 2016-04-22T14:55:37.127 回答
0

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

这告诉我您仍在使用面板的默认 FlowLayout。

如果我做 getBounds() 它被设置为正确的值,rk。

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

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

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

于 2016-04-22T14:56:33.130 回答