2013-04-07 83 views
0

我正在嘗試製作繪畫程序,並且我的畫布出現此問題,每次調整大小或最大化包含它的窗口時都會清除它。我真的沒有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(); 
} 

} 
+1

我們也不知道,所以用SSCCE更新你的問題。 – 2013-04-07 21:49:49

+0

Canvas是AWT的一部分。改用Swing並改寫一個'JComponent'。 – 2013-04-07 21:52:55

+0

所有的圖畫都是在'paintComponent'中完成的嗎?如果沒有,請繼續閱讀一些關於擺動繪圖的教程。 – Mordechai 2013-04-07 22:36:00

回答

1

聽起來像是你畫,使用getGraphics - 答案是不這樣做。相反,覆蓋paintComponent方法:

public class Canvas extends JPanel { 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g) // paints background 

     /* do your drawings here */ 

    } 

} 

如果這沒有幫助,把你的時間,並發表您的繪圖代碼。

+0

我想我知道什麼是錯的。非常感謝! – 2013-04-07 22:48:15

+0

@DianaMinzat將它作爲答案,供將來的用戶使用。 – Mordechai 2013-04-07 22:48:59

相關問題