2013-04-07 2 views
0

Я пытаюсь сделать программу рисования, и у меня есть эта проблема с моим холстом, она очищается при каждом изменении размера или увеличении окна, содержащего его. У меня действительно нет идей, где проблема, методы paint() и repaint() не переопределяются в классе canvas, и я не использую какой-либо аддитер для изменения размера окна. Любая помощь приветствуется.Холст очищается при изменении размера окна

Вот код:

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. –

+0

'Холст' является частью AWT. Используйте Swing и вместо этого замените JComponent. –

+0

Все ли рисунки сделаны в 'paintComponent'? Если нет, продолжайте читать и прочитайте несколько руководств по рисункам качания. – Mordechai

ответ

1

Похоже, вы рисуете, используя getGraphics - ответ НЕ ДЕЛАТЬ ЭТО. Вместо того, чтобы переопределить метод paintComponent:

public class Canvas extends JPanel { 

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

     /* do your drawings here */ 

    } 

} 

Если это не помогает, не торопитесь и оставьте свой код рисования.

+0

Думаю, я знаю, что случилось. Большое спасибо! –

+0

@DianaMinzat Опубликуйте его как ответ для будущих пользователей. – Mordechai