🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #153038

Re: java 2D i znikajacy rysunek

#153038
From: sielim
Date: Sun, 23 Oct 2011 17:04
113 lines
3903 bytes
Uzytkownik "zoska" <klociaciocia@gmail.com> napisal w wiadomosci 
news:3314ac17-cdaa-4834-8d4c-8fac287f6083@h5g2000vbf.googlegroups.com...

Generalnie takie rzeczy robi sie w ten sposób, ze wszystko rysujesz do 
bufora (zobacz
takie cus jak np. ImageBuffer), a w metodzie paint nie rysujesz tla, tylko 
kopiujesz na ekran
odpowiedni fragmencik (zadany Rectangle) ze swojego bufora roboczego.

Ponizej masz przyklad klasy pomocniczej, która to wykorzystuje.
Do Twoich celów mozesz w ogóle wywalic metode 'render' i atrybut
renderOK.
A poza tym, to nic nie rysujesz w paincie (tam postawiasz kopiowanie
z buffered imege'a), tylko jak cokolwiek chcesz wrzucic na ekran,
to piszesz do obiektu bi.getGraphics() ( tak, jak tu w paincie robi to 
render() )
i ew. repaint() na panelu.

Powodzenia :)

package pl.org.sielim.swing;

import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Dimension;
import java.awt.image.BufferedImage;

/**
 * Panel wspomagajacy podwójne buforowanie.
 * Jak tego uzywac ? - patrz metody render i setRenderOK
 *
 * @author filip
 */
public class BufferedPanel extends JPanel {

 public BufferedPanel() {
 }

 /** Metoda tworzaca obraz. Do pokrywania - definiujemy wlasny
  * sposób rysowania panelu.
  * Domyslnie po prostu wypelnia panel kolorem tla.
  * @param gdc
  * @param d
  */
 protected void render(Graphics gdc, Dimension d) {
  gdc.setColor(this.getBackground());
  gdc.fillRect(0, 0, d.width, d.height);
 }

 /** Z pomoca tej metody sygnalizujemy (false),
  * ze zawartosc bufora jest nieaktualna
  * i nalezy obraz wyrenderowac od nowa.
  * Zawsze, kiedy uznalemy, ze trzeba renderowac od nowa,
  * stosujemy sekwencje wywolan:
  *  setRender(false);
  *  repaint();
  * @param v
  */
 public void setRenderOK(boolean v) {
  this.renderOK = v;
 }

 /** Przydaje sie - jak np. bawimy sie w klikanie mysza i pozycjonowanie, 
skalowanie itp.
  * @return
  */
 public Dimension getImgSize() {
  return this.bisize;
 }

 /****************************************/

 private boolean renderOK;

 public void paint(Graphics gdc) {
  super.paint(gdc);
  Dimension d = this.getSize();
  //System.out.println("BIP paint " + d + "==" + this.getImgSize());
  if (d != null) {
   if ((bi == null) || !d.equals(this.getImgSize())) {
    this.bisize = d;
    System.out.println("create image !");
    this.bi = this.createImage(d);
   }
   if (!this.renderOK) {
    //System.out.println("render !");
    this.render(bi.getGraphics(), d);
    this.setRenderOK(true);
   }
   gdc.drawImage(bi, 0, 0, null);
  }

 }

 private BufferedImage bi;
 private BufferedImage getBufImage() {
  return this.bi;
 }

 private void setBufImage(BufferedImage b) {
  this.bi = b;
 }

 private Dimension bisize;
 private BufferedImage createImage(Dimension d) {
  BufferedImage bimg = (BufferedImage) createImage(d.width, d.height);
  this.setRenderOK(false);
  return bimg;
 }


} 
Technical Details
Message-ID: <j81hf2$6qr$1@news.onet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!.POSTED!not-for-mail
References: <3314ac17-cdaa-4834-8d4c-8fac287f6083@h5g2000vbf.googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!.POSTED!not-for-mail
From: "sielim" <sielim.ciach@ciach.wp.pl>
Newsgroups: pl.comp.lang.java
Subject: Re: java 2D i znikajacy rysunek
Date: Sun, 23 Oct 2011 19:04:37 +0200
Organization: http://onet.pl
Lines: 114
Message-ID: <j81hf2$6qr$1@news.onet.pl>
References: <3314ac17-cdaa-4834-8d4c-8fac287f6083@h5g2000vbf.googlegroups.com>
NNTP-Posting-Host: host-81-190-110-104.gdynia.mm.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1319389474 7003 81.190.110.104 (23 Oct 2011 17:04:34 GMT)
X-Complaints-To: niusy@onet.pl
NNTP-Posting-Date: Sun, 23 Oct 2011 17:04:34 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.5931
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6109
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit