BAB I PENDAHULUAN 1.1. Bahasa Pemrograman Java 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. Listing 1.1 menunjukkan program GUI Java sederhana menggunakan AWT. 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); } } } Ketik kode Java di atas, kemudian compile dan jalankan. Apa yang dihasilkan oleh program tersebut? 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 Anda lakukan tahapan-tahapan berikut: 1. Ketika listing kode berikut. 2. Compile listing kode yang sudah Anda ketikkan 3. Jalankan file dari hasil peng-compile-an tersebut. 4. Tampilan apa yang dihasilkan oleh program tersebut? Kode Java 2.1 Demo2D.java /* Demo kemampuan Java 2D Gunakan perintah: javac Demo2D, untuk meng-compile file ini Kemudian jalankan file hasil peng-compile-an dengan perintah java Demo2D */ 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.