我有一个应定位的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);
}
}
答案 0 :(得分:3)
为了使用绝对定位(除非在非常罕见的情况下我不建议)你必须通过调用父容器上的setLayout(null);
来删除父母的布局管理器:
getContentPane().setLayout(null);
getContentPane().add(new Panel());
答案 1 :(得分:3)
在Swing中,组件的定位很少由组件本身决定。它通常由容器的LayoutManager决定(反过来,它受到自己容器的布局管理器的影响)。
理由是视觉定位不是一种“分而治之”的活动类型:一个组件的定位会影响其他组件的定位,所以你需要某种“中央定位权威”,即:AKA:布局经理。