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…
One Response to “Képkezelés Java-ban II. rész”
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.