2014-01-26 3 views
1

Я рисую много BufferedImage годов на JFrame с помощью краски() метод,Java Repaint одно изображение

public void paint(Graphics g){ 
     super.paint(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.drawImage(bufferedImg, x, y, layeredPane); 
     ...More images 
    } 

Проблема заключается в том, что перерисовывает все изображения и поэтому экран погаснет, а затем, отображать изображения. Мне нужно перерисовать один образ, а не все в методе рисования. Так что я попытался сделать еще один метод разделения, то метод рисования и просто назвать это ..

public void drawImage(){ 
    Graphics2D g2d = (Graphics2D) getGraphics(); 

    if (condition == true) g2d.drawImage(bufferedImg, x, y, layeredPane); 
} 

И это работает, чтобы сделать изображение, но после того, как логическое установлено значение ложь и называется, он по-прежнему сохраняет изображения на экран. Извините, если это было опубликовано раньше, я видел довольно много сообщений о перерисовке изображений на Java, но я не мог найти тот, который специально перекраивает одно изображение.

ответ

2
  1. Если ваша программа является программой Swing, тогда вы не должны переопределять краску, а скорее paintComponent(...) производного класса JComponent.
  2. Вы можете ограничить местоположение перекрашенной области, вызвав repaint(Rectangle r), с границами прямоугольника, которые являются областью, которую вы хотите изменить.
  3. Нельзя получить контекст графики, вызвав getGraphics() на компонент, поскольку это даст вам недолговечный графический объект, и все, что нарисовано с ним, будет потеряно при перерисовке.
  4. Если многие из ваших изображений не изменяются, если они действуют как фон, подумайте о том, чтобы рисовать их на одном фоне BufferedImage, а затем рисовать это в своем методе paintComponent(...).

Для получения дополнительной информации, пожалуйста, создайте и опубликуйте minimal, compilable, runnable example program.


Редактировать
Что касается вашей новой должности:

Я рисую много BufferedImage годов на JFrame, используя краску методом()

Нет, никогда не рисовать прямо в JFrame, поскольку вы теряете многие преимущества графики Swing, включая двойную буферизацию, и рискуете испортить рисование границ и дочерних компонентов. Вы хотите прочитать Swing custom painting tutorial, чтобы узнать больше о том, как правильно рисовать.

+0

Большое спасибо, это очень полезно. И да, это сделано в JFrame, я редактировал свой пост. – user3211158

+0

@ user3211158: см. Редактирование для публикации. –