关于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()”会改变程序,请问产生变化的原因~~~ 展开
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()”会改变程序,请问产生变化的原因~~~ 展开
1个回答
展开全部
简单点说,因为super.paintComponent()这一句是调用了父类的方法,那么,你每次重绘(repaint())的时候,程序就会调用到自身的paintComponent()方法,(它覆盖了父类的同名方法)而你在paintComponent方法中第一行就先调用了super.paintComponent进行界面重绘,那么就由父类先进行界面重绘(查看JDK的源代码,你会发现,一般是恢复原状),父类重绘完之后,界面就恢复到某个界面,这时候才调用drawLine画出一条线,这是一种情况。
另外一种情况就是,如果注释掉super.paintComponent()的话,那么你的类本身已经覆盖掉它的父类的paintComponent方法,所以不会执行到它,界面需要重绘的时候,纯粹是你定义的那个类的paintComponent方法中的其它代码负责重绘!只是执行了drawLine方法。
也就是说,注释掉或者不注释掉super.paintComponent(),将会改变界面重绘过程!所以结果当然不一样,尤其是你不可以直接控制什么时候进行界面重绘、重绘多少次的时候,结果更加难以相同
另外一种情况就是,如果注释掉super.paintComponent()的话,那么你的类本身已经覆盖掉它的父类的paintComponent方法,所以不会执行到它,界面需要重绘的时候,纯粹是你定义的那个类的paintComponent方法中的其它代码负责重绘!只是执行了drawLine方法。
也就是说,注释掉或者不注释掉super.paintComponent(),将会改变界面重绘过程!所以结果当然不一样,尤其是你不可以直接控制什么时候进行界面重绘、重绘多少次的时候,结果更加难以相同
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询