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);
}
}
}
} 展开
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);
}
}
}
} 展开
3个回答
展开全部
在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
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询