Как я могу полностью перекрасить холст рамки Java? - PullRequest
1 голос
/ 22 февраля 2012

Я использую AWT в Java для создания анимированных кадров. Он состоит из Frame и Canvas, а также некоторых других компонентов. Код в основном это:

public class MyFrame extends Frame implements Runnable{

     private Canvas c = new Canvas();
     public  MyFrame(){

        c.setSize(100, 100);
        this.setSize(100, 100);
        this.add(c);
     }

}

Теперь я хочу нарисовать часть изображения на холсте. Я попытался использовать метод рисования кадра:

public void paint(Graphics g){

     Graphics canvasG = c.getGraphics();
     canvasG.drawImage(img, x1, y1, w1, h1, x2, y2, w2, h2, null);

{

Это рисует часть изображения поверх той части, которая была нарисована ранее. Я, однако, хочу перекрасить холст полностью.

1 Ответ

1 голос
/ 24 февраля 2012

WTF, чтобы ответить на ваш вопрос:

  • Не рисуйте в классе, расширяющем Frame, а скорее в методе рисования класса, расширяющего Canvas.Другими словами, создайте класс MyCanvas, который расширяет Canvas, и предоставьте ему переопределение метода рисования.
  • Создайте объект этого класса и добавьте его во фрейм, чтобы его можно было отображать.
  • Первым вызовом в переопределении метода рисования вашего класса Canvas должен быть метод super, super.paint(g).Это перерисовает Canvas, стирая вещи, которые нужно стереть.
  • Не используйте getGraphics для получения объекта Graphics из компонента, так как полученный объект не будет сохраняться, вызывая плохие побочные эффекты (попробуйте это, а затем сверните ивосстановите ваш графический интерфейс, чтобы понять, что я имею в виду).
  • Вместо этого используйте объект Graphics, полученный из JVM и переданный в метод рисования.
  • Исключением является работа с BufferedImages.Для них, да, иди и получи графический объект через getGraphics(), когда тебе это нужно, но только не забудь избавиться от него, когда закончишь, чтобы не исчерпать системные ресурсы.

Веселитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...