关于super.paintComponent()的使用

importjava.awt.*;importjava.awt.geom.*;importjavax.swing.*;importjava.awt.event.*;pub... import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.awt.event.*;

public class 110113{
public static void main(String[] args){
MyFrame frame = new MyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

class MyFrame extends JFrame{
public MyFrame(){
setTitle("DrawTest");
setSize(W,H);
MyPanel panel = new MyPanel();
Container contentPane = getContentPane();
contentPane.add(panel);
}
public static final int W=400;
public static final int H=400;
}

class MyPanel extends JPanel implements MouseListener{
int x1,x2;
int y1,y2;
MyPanel(){
addMouseListener(this);
}

public void mouseClicked(MouseEvent e){
}

public void mousePressed(MouseEvent e){
x1=e.getX();
y1=e.getY();
}

public void mouseReleased(MouseEvent e){
x2=e.getX();
y2=e.getY();
repaint();
}

public void mouseEntered(MouseEvent e){
}

public void mouseExited(MouseEvent e){
}

public void paintComponent(Graphics g){
// super.paintComponent(g);
g.drawLine(x1,y1,x2,y2);
}
}

上面这段程序中,启用"//"之后的“super.paintComponent()”会改变程序,请问产生变化的原因~~~
展开
 我来答
招心竹0
推荐于2017-09-16 · TA获得超过738个赞
知道答主
回答量:47
采纳率:100%
帮助的人:38.5万
展开全部
简单点说,因为super.paintComponent()这一句是调用了父类的方法,那么,你每次重绘(repaint())的时候,程序就会调用到自身的paintComponent()方法,(它覆盖了父类的同名方法)而你在paintComponent方法中第一行就先调用了super.paintComponent进行界面重绘,那么就由父类先进行界面重绘(查看JDK的源代码,你会发现,一般是恢复原状),父类重绘完之后,界面就恢复到某个界面,这时候才调用drawLine画出一条线,这是一种情况。
另外一种情况就是,如果注释掉super.paintComponent()的话,那么你的类本身已经覆盖掉它的父类的paintComponent方法,所以不会执行到它,界面需要重绘的时候,纯粹是你定义的那个类的paintComponent方法中的其它代码负责重绘!只是执行了drawLine方法。

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

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式