Pengantar Grafika Komputer Dengan Java
Table of Contents
Java memiliki dua fasilitas untuk
pemrograman GUI: AWT dan Swing. Versi awal Java memberikan dukungan grafik yang
terbatas. Hanya fitur-fitur grafik minimal yang telah dimasukkan dalam JDK 1.x.
Dukungan Antarmuka Grafis (GUI) dan fitur untuk menggambar grafis telah
disediakan dalam paket Abstract Window Toolkit (AWT). Komponen GUI dalam AWT
sangat berat – dimapkan ke dalam komponen native sistem operasi.
Disamping sekumpulan fiturnya yang sederhana untuk membuat elemen-elemen GUI,
AWT memberikan kemampuan untuk mengatur atribut rendering,
seperti menggambar dengan warna dan menggambar grafik sederhana, misalnya
garis, persegipanjang, dan oval. Juga ada beberapa dukungan untuk gambar (image).
Tetapi, fitur-fitur ini terbatas. Contohnya, tidak ada cara untuk mengatur
tebal dari garis yang digambar. Karena keterbatasannya, Java versi awal tidak
menyediakan dukungan yang cukup untuk pemrograman grafika komputer modern.
Paket Swing adalah desain ulang pemrograman GUI termasuk API dalam platform
Java 2. Kebanyakan komponen Swing tidak berat – tidak diimplementasikan sebagai
komponen asal. Dukungan grafis dalam Java 2 juga lebih ditingkatkan lagi.
Contoh Program Java Grafika Sederhana :
import java.awt.*;
import java.awt.event.*;
public class AWTDemo extends Frame
implements ActionListener{
int x = 100;
int y = 100;
public static void main(String[] args) {
Frame frame = new AWTDemo();
frame.setSize(640, 480);
frame.setVisible(true);
}
public AWTDemo() {
setTitle("AWT Demo");
// create menu
MenuBar mb = new MenuBar();
setMenuBar(mb);
Menu menu = new Menu("File");
mb.add(menu);
MenuItem mi = new MenuItem("Exit");
mi.addActionListener(this);
menu.add(mi);
// end program when window is closed
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent ev) {
System.exit(0);
}
};
this.addWindowListener(l);
// mouse event handler
MouseListener mouseListener = new MouseAdapter() {
public void mouseClicked(MouseEvent ev) {
x = ev.getX();
y = ev.getY();
repaint();
}
};
addMouseListener(mouseListener);
}
public void paint(Graphics g) {
g.drawOval(x-50, y-50, 100, 100);
}
public void actionPerformed(ActionEvent ev) {
String command = ev.getActionCommand();
if ("Exit".equals(command)) {
System.exit(0);
}
}
}
Program tersebut adalah sebuah aplkasi
GUI menggunakan AWT. Program itu mempunyai sebuah jendela (window) utama
dengan sebuah menu dan sebuah lingkaran. Menunya hanya berisi sebuah item,
“Exit”, yang digunakan untuk menutup jendela (window) ketika dipilih.
Penggambaran grafik merespon hasil klik mouse dengan menggambar objek pada
lokasi mouse ketika di-klik.
Kelas AWTDemo didefinisikan menjadi
sebuah subkelas Frame (Bingkai). Kelas tersebut mendefinisikan windows (jendela)
program utama. Menu dalam frame (bingkai) dibuat dengan objek dari Kelas
MenuBar, Menu, dan MenuItem. Kelas AWTDemo mengimplementasikan interface
ActionListener untuk memproses ActionEvent yang dibangkitkan oleh pilihan menu.
Method actionPerformed yang didefinisikan dalam interface adalah kendali (handler)
untuk kejadian (event). Ketika item menu “Exit” dipilih, program keluar
dengan memanggil method System.exit(0).
Dua pengendali kejadian (event
handler) lainnya didefinisikan dalam konstruktor kelas AWTDemo. Sebuah
WindowListener didefinisikan sebagai sebuah kelas anonim dari WindowAdapter.
Kelas ini akan menjalankan method windowClosing untuk menghentikan program
ketika menerima kejadian (event) penutupan (closing) untuk jendela
(window). Listener lainnya adalah sebuah MouseListener, diturunkan dari
kelas MouseAdapter. Methode mouseClicked digunakan untuk menangani kejadian
klik-mouse (event mouse-click). Dalam method mouseClicked, lokasi
mouse-nya disimpan kedalam variabel x dan y, dan sebuah panggilan terhadap
method repaint dibuat untuk penggambaran kembali dan memindahkan objek ke
lokasi yang baru.
Method paint menggambar sebuah
lingkaran beradius 50 dengan method drawOval dalam objek Graphics. Titik tengah
lingkaran ditentukan dengan variabel x dan y.
Method utama (main method)
membuat dan menampilkan sebuah instance AWTDemo. Bingkainya (frame)
ditentukan dengan ukuran 640 x 480.
Java 2D
Platform Java memberikan sekumpulan API
(application programming interface) yang komprehensif. Java API mencakup
pekerjaan dan aplikasi yang luas: I/O file, grafika, multimedia, database,
jaringan, keamanan, dan sebagainya.
Java 2 membawa kemajuan yang signifikan
dalam kemampuan grafik dengan memperkenalkan Swing dan API Java 2D dan 3D. API
yang didesain dengan baik memberikan dukungan komprehensif untuk grafika
komputer. Bersama-sama dengan keuntungan unik yang dapat diperoleh dari bahasa
pemrograman Java, mereka telah mengkombinasikan Java dengan Java 2D dan 3D;
sebuah pilihan yang sangat baik untuk pemrograman grafika dan belajar grafika
komputer.
Di bawah ini sebuah contoh yang
mendemonstrasikan fitur grafika Java 2D. Kode dalam demo ini menggunakan
kemampuan Java 2D seperti, transparansi, pewarnaan gradien, transformasi, dan
pemilihan jenis huruf yang tidak tersedia dalam Java AWT.
Untuk mencoba kemampuan Java 2D di
komputer sobat, ketikkan kode berikut :
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.font.*;
import java.awt.geom.*;
public class Demo2D extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle("Java 2D Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new Demo2D();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
public void init() {
JPanel panel = new Panel2D();
getContentPane().add(panel);
}
}
class Panel2D extends JPanel{
public Panel2D() {
setPreferredSize(new Dimension(500, 400));
setBackground(Color.white);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
// draw an ellipse
Shape ellipse = new Ellipse2D.Double(150, 100, 200, 200);
GradientPaint paint =
new GradientPaint(100,100, Color.white, 400, 400, Color.gray);
g2.setPaint(paint);
g2.fill(ellipse);
// set transparency
AlphaComposite ac =
AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f);
g2.setComposite(ac);
g2.setColor(Color.blue);
// draw transparent text
Font font = new Font("Serif", Font.BOLD, 120);
g2.setFont(font);
g2.drawString("Java", 120, 200);
// get outline of text glyph
FontRenderContext frc = g2.getFontRenderContext();
GlyphVector gv = font.createGlyphVector(frc, "2D");
Shape glyph = gv.getOutline(150,300);
// draw rotated glyph
g2.rotate(Math.PI/6, 200, 300);
g2.fill(glyph);
}
}
Nama kelas komponen Swing secara khusus
mempunyai awalan “J”. Kelas Panel2D extends
kelas JPanel dan overrides method paintComponent. Parameter Grafik dalam
method adalah cast to Graphics2D untuk mengambil manfaat fungsi yang
dikembangkan dalam Java 2D. Sebuah lingkaran digambar dengan warna gradien yang
merubah warnanya berdasarkan lokasi. Kemudian composite rule diatur
untuk mencapai derajat transparansi. Huruf glyph untuk string text “2D” diambil
dan garis tepinya (outline) digunakan sebagai bentuk geometri. Bentuk
string “2D” diputar 30 derajat (p/6).
Program Java sering dapat ditulis
sebagai applet atau aplikasi. Program di atas sebuah contoh program “dual
purpose”. Kelas Demo2D adalah subkelas dari JApplet dan dapat dijalankan
sebagai applet. Tetapi, dalam program ini juga terdapat method utama (main
method) sehingga juga dapat dijalankan sebagai aplikasi. Method utama (main
method) membuat sebuah instance Jframe dan menambah sebuah instance Demo2D
ke bingkai (frame). Hasil dari program aplikasi dan aplet hampir mirip.
Posted By
Post a Comment