我正在嘗試製作繪畫程序,並且我的畫布出現此問題,每次調整大小或最大化包含它的窗口時都會清除它。我真的沒有ideea問題出在哪裏,paint()和repaint()方法在canvas類中沒有被覆蓋,我也沒有使用任何addapter來調整窗口的大小。任何幫助將非常感激。畫布在調整窗口大小時清除
下面的代碼:
public class Plansa extends Canvas{
Image image;
Pencil pencil;
public Plansa(){
this.setSize(800, 600);
this.setBackground(Color.white);
pencil = new Pencil(this);
addMouseListener(pencil);
addMouseMotionListener(pencil);
}
public Plansa(int width, int height){
this.setBounds(0, 0, width, height);
this.setBackground(Color.white);
pencil = new Pencil(this);
addMouseListener(pencil);
addMouseMotionListener(pencil);
}
public Plansa(Image imag) {
this.setBackground(Color.white);
this.setSize(imag.getWidth(this), imag.getHeight(this));
image = imag;
this.image = imag;
this.repaint();
pencil = new Pencil(this);
addMouseListener(pencil);
addMouseMotionListener(pencil);
}
public Dimension getPreferredSize() {
if(image==null)
return new Dimension(800, 600);
int w = image.getWidth(this);
int h = image.getHeight(this);
return new Dimension(w, h);
}
}
public class Fereastra extends JFrame{
private Plansa plansa;
public Fereastra() {
super("***Painter***") ;
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((dimension.getWidth() - this.getWidth())/2);
int y = (int) ((dimension.getHeight() - this.getHeight())/2);
this.setLocation(0, 0);
this.setSize(dimension);
plansa = new Plansa(this.getWidth(), this.getHeight());
//...
setDefaultCloseOperation(EXIT_ON_CLOSE);
add (plansa, BorderLayout.CENTER) ;
pack();
}
}
我們也不知道,所以用SSCCE更新你的問題。 – 2013-04-07 21:49:49
Canvas是AWT的一部分。改用Swing並改寫一個'JComponent'。 – 2013-04-07 21:52:55
所有的圖畫都是在'paintComponent'中完成的嗎?如果沒有,請繼續閱讀一些關於擺動繪圖的教程。 – Mordechai 2013-04-07 22:36:00