Java小问题

我不明白paintComponent函数是什么时候调用的,是不是触发一个事件是重新调用一次?还有repaint()跟paintComponent有什么联系?importj... 我不明白paintComponent函数是什么时候调用的,是不是触发一个事件是重新调用一次?还有repaint()跟paintComponent有什么联系?
import java.awt.event.*;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TryMouseEvent extends JFrame{

public TryMouseEvent(){
MessageShowPanel p = new MessageShowPanel();
getContentPane().setLayout(new BorderLayout());
getContentPane().add(p);

}
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new TryMouseEvent();
frame.setSize(400,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
static class MessageShowPanel extends JPanel{
String message;
int x, y;
int key = 1;
public MessageShowPanel(){
addMouseListener(new MouseListener(){
public void mousePressed(MouseEvent e){
key = 1;
x = e.getX();
y = e.getY();
repaint();
}

@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}

public void mouseReleased(MouseEvent e) {
key = 0;
repaint();
}

});

}
protected void paintComponent(Graphics g){
if(key ==1){
super.paintComponent(g);
g.drawString("the point is "+x+","+y, x, y);
}
else{
super.paintComponent(g);
g.drawString("",0, 0);
}
}
}
}
展开
 我来答
a327297867
2010-12-12 · TA获得超过128个赞
知道小有建树答主
回答量:190
采纳率:0%
帮助的人:101万
展开全部
在main方法里面调用的...
static class MessageShowPanel extends JPanel 这个静态方法
静态方法中有MessageShowPanel()
然后paintComponent()这个方法在MessageShowPanel() 中
然后最上面有个TryMouseEvent()这个是个构造方法
其中把MessageShowPanel new 到了TryMouseEvent()方法中
因为是静态的所以直接使用方法名
然后再main方法中又new 了TryMouseEvent()这个而方法
所以说paintComponent()这个方法是在main 方法中调用的
至于repaint 和 paintComponent
repaint 只有在使用了MessageShowPanel() 中的addMouseListener()的时候会被调用

paintComponent 是个 protected 的方法 没有看见它被调用的方法

TryMouseEvent()因为是个构造方法所以一担TryMouseEvent()被实例化
------------------------------------------------------------------------------
public TryMouseEvent(){
MessageShowPanel p = new MessageShowPanel();
getContentPane().setLayout(new BorderLayout());
getContentPane().add(p);

}
------------------------------------------------------------------------------
以上这段代码就会被执行
它们的关系就像楼上所说的....repaint会调用paintComponent
匿名用户
2010-12-12
展开全部
我不明白paintComponent函数是什么时候调用的,是不是触发一个事件是重新调用一次?还有repaint()跟paintComponent有什么联系?

当这个控件被更新的时候updateUI会调用repaint,repaint会调用paintComponent 就这么个关系
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lewoleni
2010-12-12
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
jfgj
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式