为什么画不是画在屏幕上?

时间:2014-08-11 19:53:00

标签: java swing paint

我有这个简单的代码,应该在每个面板的左上角有三个面板和绘制和椭圆

public class main1 extends JPanel {
    public main1() {
        // TODO Auto-generated constructor stub
        this.setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
        JPanel1 panel1 = new JPanel1(Color.YELLOW);
        panel1.setBackground(Color.black);
        JPanel1 panel2 = new JPanel1(Color.red);
        panel2.setBackground(Color.blue);
        JPanel1 panel3 = new JPanel1(Color.pink);
        panel3.setBackground(Color.green);
        this.add(panel1);
        this.add(panel2);
        this.add(panel3);
    }

    class JPanel1 extends JPanel{
        Color c;
        public JPanel1(Color c) {
            this.c = c;


        }
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            System.out.println(this.getBounds().x);
            g.setColor(c);
            g.drawOval(this.getBounds().x, this.getBounds().y, 200, 200);
        }
    }

    public static void main(String args[]) {
        JFrame f = new JFrame("Two Panels");
        f.setContentPane(new main1());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(300, 300);
        f.setVisible(true);

    }
}
然而,它似乎只绘制了第一个面板的第一个椭圆并忽略了其余部分。 有人可以解释一下。我究竟做错了什么?

1 个答案:

答案 0 :(得分:1)

不要使用getBounds(),因为它会提供相对于其父级的组件位置。使用面板的坐标及其宽度和高度代替。在您的示例中,您将在面板边界外绘画。例如,使用它来绘制椭圆:

g.drawOval(0, 0, getWidth(), getHeight());

一些旁注: