Anda di halaman 1dari 14

Catatan:

Kelas Arc2D mendefinisikan 3 (tiga) tipe busur, ditunjukkan dengan konstanta yang menyertai
dalam kelas ini: OPEN, PIE, dan CHORD.
Berikut adalah contoh penerapan kelas geometris dalam sebuah program Java.

Listing 2.1 KelasGeometri.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.font.*;
import java.awt.geom.*;

public class KelasGeometri extends JApplet {


public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle(“Kelas Geometri”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new KelasGeometri();
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;
//gambar garis;
g2.drawLine(100,100,200,200);
//gambar persegipanjang
g2.draw(new Rectangle2D.Double(50, 25, 100, 50));
//gambar elips
9
g2.draw(new Ellipse2D.Double(200,50,100,50));
//gambar busur
g2.draw(new Arc2D.Double(200, 125, 100, 50, 90, 135, Arc2D.OPEN));
//gambar kurva kuadrat
g2.draw(new QuadCurve2D.Double(100,250,175,175,300,250));
//gambar kurva kubik
g2.draw(new CubicCurve2D.Double(50,300,150, 200,200,400,300,300));
}
}

Latihan:
Ketiklah kode program diatas. Kemudian compile dan jalankan. Apa yang dihasilkan oleh
program tersebut? Jelaskan!

GEOMETRI BIDANG KONSTRUKTIF


Satu cara untuk membuat bentuk lebih kompleks adalah dengan mengkombinasikan beberapa
bentuk sebelumnya (objek geometri). Cara ini dikenal sebagai geometri area konstruktif
(constructive area geometry). Kelas Area didesain untuk menghasilkan geometri area
konstruktif. Empat operasi yang didukung adalah: union, interseksi,
pertidaksamaan, pertidaksamaan geometris. Operasi ini dilakukan pada wilayah dua bidang,
menghasilkan bidang baru. Objek Area dapat dibangun dari semua objek Shape menggunakan
konstruktor berikut:
void add(Area a)
void intersect(Area a)
void subtract(Area a)
void exclusiveOr(Area a)
Listing berikut menunjukkan sebuah program yang mendemonstrasikan efek dari empat operasi
geometri area konstruktif. Dua bentuk dikombinasikan menggunakan empat operasi untuk
menghasilkan empat bentuk baru.

Listing 2.2 AddArea.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
public class AddArea extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle(“Constructive Area Geometry”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new AddArea();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
public void init() {
JPanel panel = new AreaPanel();
getContentPane().add(panel);
}
}
class AreaPanel extends JPanel {
public AreaPanel() {
setPreferredSize(new Dimension(760, 400));
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
//lingkaran pertama.
Shape s1 = new Ellipse2D.Double(0, 0, 100, 100);
//lingkaran kedua.
Shape s2 = new Ellipse2D.Double(60, 0, 100, 100);
//area geometri pertama.
Area a1 = new Area(s1);
//area geometri kedua.
Area a2 = new Area(s2);
//geser posisi kedua kedua lingkaran dengan x=20 y=50.
g2.translate(20, 50);
//penentuan ketebalan dan warna garis.
BasicStroke bsThickLine = new BasicStroke(5.0f);
g2.setStroke(bsThickLine);
g2.setPaint(Color.blue);
//gambar lingkaran pertama.
g2.draw(s1);
//gambar lingkaran kedua.
g2.draw(s2);
//operasi “add”.
11
a2.add(a1);
//penentuan warna untuk mengisi hasil operasi “add”.
g2.setPaint(Color.green);
//pewarnaan area hasil operasi “add”.
g2.fill(a2);
}
}

Listing 2.3 IntersectArea.java


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
public class IntersectArea extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle(“Geometri Bidang Konstruktif”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new IntersectArea();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
public void init() {
JPanel panel = new AreaPanel();
getContentPane().add(panel);
}
}
class AreaPanel extends JPanel {
public AreaPanel() {
setPreferredSize(new Dimension(760, 400));
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
//lingkaran pertama
Shape s1 = new Ellipse2D.Double(0, 0, 100, 100);
12
//lingkaran kedua
Shape s2 = new Ellipse2D.Double(60, 0, 100, 100);
//area geometri pertama
Area a2 = new Area(s2);
//pindah posisi kedua kedua lingkaran dengan x=20 y=50
g2.translate(20, 50);
//gambar lingkaran pertama
g2.draw(s1);
//gambar lingkaran kedua
g2.draw(s2);
//area geometri kedua
Area a1 = new Area(s1);
//operasi “intersect”
a1.intersect(a2);
//penentuan ketebalan dan warna garis
BasicStroke bsThickLine = new BasicStroke(5.0f);
g2.setStroke(bsThickLine);
g2.setPaint(Color.blue);
//gambar bidang hasil operasi “intersect”
g2.draw(a1);
//penentuan warna untuk mengisi bidang hasil operasi “intersect”.
g2.setPaint(Color.green);
//pewarnaan bidang hasil operasi “intersect”.
g2.fill(a1);
}
}

Listing 2.4 Subtract.Area.java


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
public class SubtractArea extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle(“Geometri Bidang Konstruktif”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new SubtractArea();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
public void init() {
JPanel panel = new AreaPanel();
getContentPane().add(panel);
}
}
class AreaPanel extends JPanel {
public AreaPanel() {
setPreferredSize(new Dimension(760, 400));
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
//lingkaran pertama
Shape s1 = new Ellipse2D.Double(0, 0, 100, 100);
//lingkaran kedua
Shape s2 = new Ellipse2D.Double(60, 0, 100, 100);
//area geometri pertama
Area a2 = new Area(s2);
//pindah posisi kedua kedua lingkaran dengan x=20 y=50
g2.translate(20, 50);
//gambar lingkaran pertama
g2.draw(s1);
//gambar lingkaran kedua
g2.draw(s2);
//area geometri kedua
Area a1 = new Area(s1);
//operasi “subtract”
a1.subtract(a2);
//penentuan ketebalan dan warna garis
BasicStroke bsThickLine = new BasicStroke(5.0f);
g2.setStroke(bsThickLine);
g2.setPaint(Color.blue);
14
//gambar bidang hasil operasi “subtract”
g2.draw(a1);
//penentuan warna untuk mengisi bidang hasil operasi “subtract”.
g2.setPaint(Color.green);
//pewarnaan bidang hasil operasi “subtract”.
g2.fill(a1);
}
}

Listing 2.5 exclusiveOrArea.java


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
public class ExclusiveOrArea extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle(“Geometri Bidang Konstruktif”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new ExclusiveOrArea();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
public void init() {
JPanel panel = new AreaPanel();
getContentPane().add(panel);
}
}
class AreaPanel extends JPanel {
public AreaPanel() {
setPreferredSize(new Dimension(760, 400));
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
//lingkaran pertama
15
Shape s1 = new Ellipse2D.Double(0, 0, 100, 100);
//lingkaran kedua
Shape s2 = new Ellipse2D.Double(60, 0, 100, 100);
//area geometri pertama
Area a2 = new Area(s2);
//pindah posisi kedua kedua lingkaran dengan x=20 y=50
g2.translate(20, 50);
//gambar lingkaran pertama
g2.draw(s1);
//gambar lingkaran kedua
g2.draw(s2);
//area geometri kedua
Area a1 = new Area(s1);
//operasi “exclusiveOr”
a1.exclusiveOr(a2);
//penentuan ketebalan dan warna garis
BasicStroke bsThickLine = new BasicStroke(5.0f);
g2.setStroke(bsThickLine);
g2.setPaint(Color.blue);
//gambar bidang hasil operasi “exclusiveOr”
g2.draw(a1);
//penentuan warna untuk mengisi bidang hasil operasi “exclusiveOr”.
g2.setPaint(Color.green);
//pewarnaan bidang hasil operasi “exclusiveOr”.
g2.fill(a1);
}
}

Latihan
ketik masing-masing listing program tersebut di atas. Kemudian compile dan jalankan.
Catatan:
Supaya hanya menampilkan bidang hasil operasi add, intersect, subtract, dan, dan exclusiveOr,
hilangkan instruksi (baris program):
//gambar lingkaran pertama
g2.draw(s1);
//gambar lingkaran kedua
g2.draw(s2);
pada masing-masing listing program.

MENGGAMBAR OBJEK GEOMETRIS SEDERHANA


Anda telah belajar bagaimana menggambar bentuk-bentuk geometri yang terdapat dalam paket
java.awt.geom. Untuk membuat objek geometri yang lebih kompleks, misalnya poligon, segitiga,
atau bintang, Anda bisa menggunakan kelas lain dari paket java.awt.geom, yaitu GenaralPath.
GeneralPath dimulai dari titik asal, misalnya (0,0). Untuk membuat objek dengan kelas
GeneralPath, panggil dengan new GeneralPath() kemudian tambahkan segmen ke bentuk yang
akan dibuat dengan menggunakan method-method berikut:

􀀀 moveTo(float x, float y) – Memindahkan titik path sekarang ke titik path yang diinginkan.
􀀀 lineTo(float x, float y) – menambahkan segmen garis ke path sekarang
􀀀 quadTo(float x, float y) – menambahkan segmen kurva kuadrat ke path sekarang
􀀀 curveTo(float x, float y) – menambahkan segmen kurva kubik ke path sekarang
􀀀 closePath() – menutup path.

Contoh berikut menjelaskan bagaimana menggambar sebuah polyline menggunakan


GeneralPath:

Listing 2.1 KelasGeneralPath.java


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.font.*;
import java.awt.geom.*;
public class KelasGeneralPath extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle(“Kelas GeneraPath”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new KelasGeneralPath();
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;
GeneralPath gp = new GeneralPath();
//Mulai dari sudut depan-bawah mobil.
gp.moveTo(60,120);
//bagian bodi bawah-depan
gp.lineTo(80,120);
//roda depan
gp.quadTo(90,140,100,120);
//bagian bodi bawah-tengah
gp.lineTo(160,120);
//roda belakang
gp.quadTo(170,140,180,120);
//bagian bodi bawah-belakang
gp.lineTo(200,120);
//bagian belakang mobil
gp.curveTo(195,100,200,80,160,80);
//atap
gp.lineTo(110,80);
//kaca depan
gp.lineTo(90,100);
//bagian hidung mobil
18
gp.lineTo(60,100);
//bagian depan mobil
gp.lineTo(60,120);
//menggambar mobil
g2.draw(gp);
}
}

Latihan
Ketiklah kode program diatas. Kemudian compile dan jalankan. Menurut Anda gambar apa
yang dihasilkan oleh program tersebut? Jelaskan!

April 19, 2012Tinggalkan Balasan


** Praktikum Grafika Komputer (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.

Anda mungkin juga menyukai