Java Swing 如何在两个Panel上paint ?

代码如下,在两个Panel上画线,但是第二个Panel上的线总是不能显示,
从输出的打印信息来看,第二个Panel上的线是画了的。

搞了半天没搞明白,希望熟悉swing的帮忙解答。

[code="java"]import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Point;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class DemoDrawlines {

public static void main(String[] args) {
    JFrame frame = new JFrame("Demo paint on panel ");
    frame.setLocation(5, 5);
    frame.setPreferredSize(new Dimension(200,200));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    MyPanel p1 = new MyPanel();
    p1.setBackground(Color.white);
    p1.draw_vertical = true;

    MyPanel p2 = new MyPanel();
    p2.setBackground(Color.LIGHT_GRAY);
    p2.draw_horizontal = true;

    frame.getContentPane().setLayout(new GridLayout(1,2));
    frame.getContentPane().add(p1);
    frame.getContentPane().add(p2);
    frame.pack();
    frame.setVisible(true);
}

}

class MyPanel extends JPanel
{
private static final long serialVersionUID = 4027957764459633468L;
public boolean draw_horizontal = false;
public boolean draw_vertical = false;

@Override
public void paint(Graphics g) {
    super.paint(g);

    Point p = this.getLocation();
    Dimension size = this.getSize();

    System.out.println(p+":"+size);

    if(draw_horizontal)
    {
        g.setColor(Color.red);
        System.out.println("draw_horizontal "+p.x+","+ (p.y+size.height/2)+";"
                + (p.x+size.width)+","+ (p.y+size.height/2));

        g.drawLine(p.x, p.y+size.height/2, p.x+size.width, p.y+size.height/2);
    }

    if(draw_vertical)
    {
        g.setColor(Color.blue);
        System.out.println("draw_vertical"+(p.x+size.width/2)+","+ p.y+";"
                + (p.x+size.width/2)+"," + (p.y+size.height));

        g.drawLine(p.x+size.width/2, p.y, p.x+size.width/2, p.y+size.height);
    }
}

}[/code]

问题出在这个代码上:
[code="java"]Point p = this.getLocation(); [/code]

这个P是相对Parent而言的值, 而g.draw()的坐标是相对当前这个控件而言的.

[code="java"]g.drawLine(p.x, p.y+size.height/2, p.x+size.width, p.y+size.height/2);[/code]

所以: 这个值就会越界.

[code="java"] @Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

    Dimension size = this.getSize();

    if (draw_horizontal) {
        g.setColor(Color.red);

        g.drawLine(0, size.height / 2, size.width, size.height / 2);
    }

    if (draw_vertical) {
        g.setColor(Color.blue);

        g.drawLine( size.width / 2, 0, size.width / 2, size.height);
    }

}[/code]