JPanel setbounds

时间:2016-04-22 13:41:18

标签: java swing jpanel setbounds

我正在尝试将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));
}

提前致谢。

2 个答案:

答案 0 :(得分:0)

或许考虑使用未修饰的JInternalFrame?这将做你想要它做的事情,而不是大惊小怪。另外,使用setBounds而不是布局管理器通常被认为是个坏主意。

如果你绝对肯定会以这种方式做事,那么你确定你正在调用组件类的重绘方法as per spec吗?

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

答案 1 :(得分:0)

  

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

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

  

如果我执行getBounds(),则将其设置为正确的值rk。

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

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

如果这没有帮助,请发布展示问题的SSCCE。因此,创建一个JFrame并将布局设置为null。然后创建一个JPanel,设置其边界和背景,并将面板添加到框架中。向自己证明基本代码的工作原理。然后确定与工作代码和代码的不同之处。