March 2008
M T W T F S S
    Apr »
 12
3456789
10111213141516
17181920212223
24252627282930
31  




Képkezelés Java-ban II. rész

Folytassuk a java-s képkezelésünket azzal, hogy készítünk egy olyan osztályt, ami lekezeli a képbetöltést, és meg is jeleníti azt egy frame-en.

Ime:

import ct.imageutils.ImageUtility;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;

public class JImagePanel extends JPanel{
  BufferedImage image = null;

  public JImagePanel() {}

  public void loadImageFromFile(String fn)  {
   this.image = ImageUtility.loadImage(fn);
   if(this.image != null) {
    Graphics2D g = (Graphics2D)this.getRootPane().getGraphics();
    g.drawImage(this.image, null, 0, 0);
   }
  }

  @Override
  protected void paintComponent(Graphics g) {
   if(this.image != null) {
     g.drawImage(this.image, 0, 0, this);
   }
  }
}

Ezt az osztályt a JPane-b?l származtatjuk (… extends JPanel), mivel az képes a kép megjelenítésére. Két metódust készítünk el jelenleg. Az els? a kép beolvasásáért felel?s (loadImageFromFile), ami az el?z? fejezetben ismertetett ImageUtility osztályt fogja felhasználni a kép betöltésére:

this.image = ImageUtility.loadImage(fn);

Beltöltjük a képet a saját image változónkba, amit a class elején deklaráltunk. A betöltés után pedíg egyb?l meg is jelenítjük azt, már ha sikerült a betöltés, amit onnan tudunk, hogy az image változónk nem null:

   if(this.image != null) {
    Graphics2D g = (Graphics2D)this.getRootPane().getGraphics();
    g.drawImage(this.image, null, 0, 0);
   }

A második metódus tulajdonképpen a JPanel egy felülírt metódusa lesz, ami azért szükséges, hogy mikor valami változás történik a panelen, azt újra rajzoláskor a képet is újra rajzolja:

  @Override
  protected void paintComponent(Graphics g) {
   if(this.image != null) {
     g.drawImage(this.image, 0, 0, this);
   }
  }

Az @Override annotáció gondoskodik az eredeti metódus felülírásáról. Megvizsgáljuk, hogy van e kép, és ezután jöhet a rajzolása. Ha az image változónk nem null, akkor meghívjuk a graphics objetumunk drawImage metódusát, mint máskor.

Itt nem kell a graphics objetum referenciáját lekérdeznünk, mert megkapjuk azt paraméterként.

Ha kész az osztály, próbáljuk ki élesben:

import javax.swing.JFrame;

public class Kepmegjelenito {
  public static void main(String[] args) {
	JFrame frame = new JFrame("Képmegjelenít?");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800,800);
        frame.setLocation(100,100);
        frame.setVisible(true);                       

        JImagePanel imagepanel = new JImagePanel();
        frame.getContentPane().add(imagepanel);
        imagepanel.loadImageFromFile("kép elérési útvonala");

  }
}

Természetesen a megfelel? importálásokról gondosonunk kell!

Folyt. köv…

31 March 2008 | Uncategorized | Comments

One Response to “Képkezelés Java-ban II. rész”

  1. 1 KonstantinMiller 7 July 2009 @ 05:47

    Hi. I like the way you write. Will you post some more articles?

Comments:

You must be logged in to post a comment.