簡體   English   中英

重繪方法閃爍

[英]Repaint method flickering

我正在用Canvas編寫繪畫程序,一切正常,除了我繪畫時,圖像開始閃爍。 我試圖為重繪方法設置tm,但這不能解決問題。

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import java.util.*;

public class Paint extends Canvas implements MouseListener, MouseMotionListener
{
private ArrayList rectrangles = new ArrayList();
private ArrayList circles = new ArrayList();
private ArrayList shapes = new ArrayList();
private Color color;
private int strk_width;
private Path2D shape;
private boolean m_alzada = true, rectangle=false, circle = false;
private int uX,uY,x,y;
public Paint(){
this.color = Color.black;
this.setBackground(Color.white);
this.shape = new Path2D.Float();
this.shape.moveTo(0,0);
this.strk_width = 5;
} 
@Override
public void paint(Graphics g){
super.paint(g);
Graphics2D d = (Graphics2D) g;
d.setColor(Color.white);
d.fillRect(0,0,this.getWidth(), this.getHeight());
d.setStroke(new BasicStroke(this.strk_width));
d.setColor(color.black);
d.draw(this.shape);
} 

public void update(Graphics g){
paint(g);
}   

@Override
public void mouseClicked(MouseEvent e){}
@Override
public void mouseReleased(MouseEvent e){
this.lastx = e.getX();
this.lasty = e.getY();
}
@Override
public void mouseExited(MouseEvent e){}
@Override
public void mouseEntered(MouseEvent e){}
@Override
public void mousePressed(MouseEvent e){}
@Override 
public void mouseDragged(MouseEvent e){
this.x = e.getX();
this.y = e.getY();
this.shape.lineTo(x,y);
repaint();
}
@Override
public void mouseMoved(MouseEvent e){}
}


import javax.swing.*;
import java.awt.event.*;
public class Main extends JFrame
{
public Paint dibujo;
public Main(){
dibujo = new Paint();
dibujo.addMouseMotionListener(new MouseMotionListener(){
@Override 
public void mouseDragged(MouseEvent e){
dibujo.mouseDragged(e);
}
@Override
public void mouseMoved(MouseEvent e){
dibujo.mouseMoved(e);
}
});
JPanel p = new JPanel();
p.add(dibujo);
dibujo.setBounds(20,40,600,400);
add(p);
}

@SuppressWarnings("unchecked")

public static void main(String[] args){
Main m = new Main();
m.setVisible(true);
m.setSize(700,700);
}

}

任何幫助,將不勝感激

我只是用雙緩沖固定了它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM