永发信息网

关于在JPanel上画图的问题

答案:2  悬赏:30  手机版
解决时间 2021-01-16 03:57
  • 提问者网友:原来太熟悉了会陌生
  • 2021-01-15 21:42
关于在JPanel上画图的问题
最佳答案
  • 五星知识达人网友:老鼠爱大米
  • 2021-01-15 22:12
//repaint()解决不了这类问题,给你个双缓冲的例子,这个能解决此类问题:
//用鼠标在内部画图试试
//DoubleBuffer.java
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
public class DoubleBuffer {
private Canvas c;
private BufferedImage img;
private JFrame f;
int x,y;
DoubleBuffer(){
f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(600,400);
f.setResizable(false);
f.setLocationRelativeTo(null);
c = new Canvas(){
//重写Canvas的,pint方法,当重新显示窗口的时候就调用后台的图像(前台已被破坏了)
public void paint(Graphics g){
g.drawImage(img,0,0,null);
}
};
f.add(c);
f.setVisible(true);
img = new BufferedImage(f.getWidth(),f.getHeight(),BufferedImage.TYPE_INT_BGR);
c.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
x=e.getX();y=e.getY();
}
});
c.addMouseMotionListener(new MouseMotionListener(){
public void mouseDragged(MouseEvent e) {
draw(e.getX(),e.getY());
}
public void mouseMoved(MouseEvent e) {}});
}
//双缓冲的实现
void draw(int X,int Y){
Graphics g = c.getGraphics();
g.setColor(Color.yellow);
Graphics gg = img.getGraphics();
gg.setColor(Color.yellow);
g.drawLine(x,y,X,Y);
gg.drawLine(x,y,X,Y);//将前台的内容,一模一样地画在后台
g.dispose();
gg.dispose();
x=X;y=Y;
}
public static void main(String[] args) {
new DoubleBuffer();
}
}
全部回答
  • 1楼网友:一袍清酒付
  • 2021-01-15 23:24
repaint()刷一下
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯