/**
* ImagePanel merupakan Swing component yang dapat ditampilkan di OFImage.
* Kelas ini dikonstruksikan sebagai subclass dari JComponent dengan tambahan fungsi
* setting OFImage yang akan ditampilkan pada permukaan komponen ini.
*
* @author Daffa amanullah Setyawan
* @version 7 Desember 2020
*/
import java.awt.*;
import javax.swing.*;
import java.awt.image.*;
public class ImagePanel extends JComponent
{
// The current width and height of this panel
private int width,height;
// Sebuah image buffer internal yang digunakan untuk melukis.
// Untuk tampilan sebenarnya, image buffer lalu disalin ke layar
private OFImage panelImage;
/**
* Buat ImagePanel baru yang kosong
*/
public ImagePanel ()
{
width = 360; // arbitrary size for empty panel
height = 240;
panelImage = null;
}
/**
* Memilih gambar yang akan ditampilkan
* @param image Gambar yang ditampilkan
*/
public void setImage (OFImage image)
{
if (image != null)
{
width = image.getWidth();
height = image.getHeight();
panelImage = image;
repaint ();
}
}
/**
* Menghilangkan gambar pada panel
*/
public void clearImage(){
Graphics imageGraphics = panelImage.getGraphics();
imageGraphics.setColor(Color.LIGHT_GRAY);
imageGraphics.fillRect(0, 0, width, height);
repaint();
}
// Metode berikut adalah redefinisi metode
// didapat dari superclasses.
/**
* Menginfokan ke layout manager berapa besar yang diinginkan.
* Buat ke layout manager berapa besar yg kita inginkan.
* (Metode ini dipanggil oleh layout manager untuk menempatkan komponen).
* @return Dimensi yang di-prefer.
*/
public Dimension getPreferredSize(){
return new Dimension(width, height);
}
/**
* Komponen perlu ditampilkan lagi. Menyalin internal image ke layar.
* (Metode ini dipanggil oleh Swing screen painter setiap kali hendak
* menampilkan komponen)
* @param g Graphics context yang dapat digunakan untuk menggambar pada komponen.
*/
public void paintComponent(Graphics g){
Dimension size = getSize();
g.clearRect(0, 0, size.width, size.height);
if(panelImage != null) {
g.drawImage(panelImage, 0, 0, null);
}
}
}