我写了一段测试代码,对JPanel添加鼠标事件监听器,当点击鼠标时,在panel上某处绘制一字符串(或是一图形),结果运行时第一次点击鼠标后,字符串绘制后瞬间又消失了,之后再点击时则正常,希望诸位高手能给出答案。(注:绘图时避免重载paint()或paintComponent()之类的方法),代码如下:
package com.iron.model;import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;public class Test extends JPanel implements MouseListener{

JFrame jf = new JFrame(); 
public Test(){
jf.add(this);
jf.setBounds(100, 100, 400, 400);
jf.setVisible(true);
this.addMouseListener(this);
}

public static void main(String[]args){
new Test();
} @Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
} @Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
Graphics g = this.getGraphics();
g.drawString("hello", 100, 100);
} @Override
public void mouseReleased(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
}
}

解决方案 »

  1.   

    你这种做法有很多隐患
    你强行拿出 Graphics 对象,然后绘制,可能是能画出点什么
    但是一个 JPanel 真正绘制的部分是由 paintComponent 控制的
    你这样一旦界面调用到 paintComponent 就会把你绘制的东西抹去
    二界面自动调用 paintComponent 的地方多的去了
    比如大小变化,比如最大最小化……