关于paintComponent的使用

程序功能,在面板上画线,并定义了一个数组,用来存储前4次画线的坐标,最小化后再打开,将前面画的线再绘制出来,从而来验证重绘功能程序如下:importjava.awt.Co... 程序功能,在面板上画线,并定义了一个数组,用来存储前4次画线的坐标,最小化后再打开,将前面画的线再绘制出来,从而来验证重绘功能
程序如下:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
import javax.swing.JFrame;
import java.awt.Container;
public class DrawLine extends JPanel{
static int i = 0;
int x1[] = new int[4];
int x2[] = new int[4];
int y1[] = new int[4];
int y2[] = new int[4];
public static void main(String[] args) {
JFrame j = new JFrame();
Container c = j.getContentPane();
DrawLine d = new DrawLine();
j.add(d);
j.setSize(250, 250);
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j.setLocation(200, 200);
j.setVisible(true);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
System.out.println("***");
for (int i = 0; i < x1.length; i++) {
g.drawLine(x1[i], y1[i], x2[i], y2[i]);
}
}
public DrawLine(){
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
x1[i] = e.getX();
y1[i] = e.getY();
}
public void mouseReleased(MouseEvent e){
Graphics g = getGraphics();
g.setColor(Color.RED);
x2[i] = e.getX();
y2[i] = e.getY();
g.drawLine(x1[i], y1[i], x2[i],y2[i]);
i++;
}
});
}
}
我的问题是:
1.在程序运行还没有画线的时候,为什么会输出2此的"***"星号,paintComponent方法被自动调用,里面的System.out.println("***");代码应该被执行一次啊,结果缺验证被执行了2次
2.我在面板上画线的时候,第一次画的时候是黑线,后面再画的时候为什么是红线?
请高手解答!!!
展开
 我来答
nldwgsvbw
2011-04-20 · TA获得超过2113个赞
知道小有建树答主
回答量:1343
采纳率:0%
帮助的人:799万
展开全部
ent()这一句是调用了父类的方法,那么,你每次重绘(repaint())的时候,程序就会调用到自身的paintComponent()方法,(它覆盖了父类的同名方法)而你在paintComponent方法中第一行就先调用了super.paintComponent进行界面重绘,那么就由父类先进行界面重绘(查看JDK的源代码,你会发现,一般是恢复原状),父类重绘完之后,界面就恢复到某个界面,这时候才调用drawLine画出一条线,这是一种情况。
另外一种情况就是,如果注释掉super.paintComponent()的话,那么你的类本身已经覆盖掉它的父类的paintComponent方法,所以不会执行到它,界面需要重绘的时候,纯粹是你定义的那个类的paintComponent方法中的其它代码负责重绘!只是执行了drawLine方法。

也就是说,注释掉或者不注释掉super.paintComponent(),将会改变界面重绘过程!所以结果当然不一样,尤其是你不可以直接控制什么时候进行界面重绘、重绘多少次的时候,结果更加难以相同
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式