JPanel忘记了它的位置

时间:2011-04-23 07:21:04

标签: java swing jpanel

我有一个应定位的JPanel。我试图在面板构造函数中使用setBounds,但它没有用。当我调用paintComponent时,似乎忘记了边界。

public class Panel extends JPanel {

    public Panel() {

        setBounds(120,100,20,300);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        // Prints out (0,0)
        System.out.println("Location: " + getLocation());
        g.drawOval(0,0, 60, 60);
    }

}

2 个答案:

答案 0 :(得分:3)

为了使用绝对定位(除非在非常罕见的情况下我不建议)你必须通过调用父容器上的setLayout(null);来删除父母的布局管理器:

getContentPane().setLayout(null);
getContentPane().add(new Panel());

答案 1 :(得分:3)

在Swing中,组件的定位很少由组件本身决定。它通常由容器的LayoutManager决定(反过来,它受到自己容器的布局管理器的影响)。

理由是视觉定位不是一种“分而治之”的活动类型:一个组件的定位会影响其他组件的定位,所以你需要某种“中央定位权威”,即:AKA:布局经理。