代码如下,在两个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]