Graphics2D dan Geometry I Putu Susila putu.sgr *AT* gmail.com October 4, 2011
1
Graphics2D
Class Graphics2D merupakan rendering engine untuk grafik 2 dimensi pada Java. Class ini merupakan turunan dari class java.awt.Graphics. Kedua class ini adalah class abstract sehingga tidak bisa dibuat objek atau instancenya secara langsung. Objek Graphics2D dapat diperoleh dengan meng-override method void paintComponent(Graphics g) dari JComponent (misalnya JPanel, dsb). Selain itu, reference ke objek Graphics2D juga bisa diperoleh melalui method Graphics getGraphics() dari class Component. Objek yang didapatkan melalui kedua method diatas bertipe Graphics, akan tetapi objek sebenarnya adalah instance dari Graphics2D. Berikut adalah beberapa method yang ada pada class Graphics. Listing 1: Beberapa methods dalam class Graphics // Setting warna yang akan digunakan untuk context ini void setColor(Color c) // Setting Font yang digunakan untuk menampilkan text void setFont(Font f) // Setting mode paint dari Graphics objek. // Akan dilakukan operasi XOR antara warna yang lama dengan warna baru void setXORMode(Color c) // Setting mode paint dari Graphics objek. // Semua setting sebelumnya akan di-overwrite dengan setting baru void setPaintMode() // Lakukan translasi terhadap koordinat asal ke koordinat (x, y) baru void translate(int x, int y) // Gambar garis dari titik (x1, y1) ke titik (x2, y2) void drawLine(int x1, int y1, int x2, int y2) // Gambar kotak dengan posisi sudut kiri atas di (x1, y1) dan // Lebar = width, serta tinggi = height
1
void drawRect(int x1, int y1, int width, int height) // Gambar elipse dalam kotak dengan posisi sudut kiri atas di (x1, y1) // dan Lebar = width, serta tinggi = height void drawOval(int x1, int y1, int width, int height) // Gambar busur pada rectangle (x1, y1) dengan lebar = width // dan tinggi = height. start: sudut awal (dalam derajat), // dimana posisi 0 derajat pada arah jam 3. arc: derajat void drawArc(int x1, int y1, int width, int height, int start, int arc) // Gambar rectangle dengan sudut bulat void drawRoundRect(int x1, int y1, int width, int height, int arcW, int arcH) // Gambar poligon yang terdiri dari beberapa titik x dan y void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) // Method-method dibawah mirip dengan method diatas, dimana // pada method dibawah, area didalam objek yang digambar, // akan diberi warna (di-fill) void fillRect(int x1, int y1, int width, int height) void fillOval(int x1, int y1, int width, int height) void fillArc(int x1, int y1, int width, int height, int start, int arc) void fillRoundRect(int x1, int y1, int width, int height, int arcW, int arcH) void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) // Tampilkan string/text dengan posisi baseline pada titik (x, y) // dengan menggunakan font dan warna saat ini. void drawString(String str, int x, int y)
Method-method diatas tidak secara jelas memisahkan antara model (bagian yang mendefinisikan objek) dan render (bagian yang menampilkan objek). Contohnya method drawOval sekaligus berfungsi mendefinisikan ellipse dan menggambarkan ellipse. Pada class Graphics2D dilakukan pemisahan yang jelas antara model dan render. Berikut adalah beberapa method pada class Graphics2D. Listing 2: Beberapa methods dalam class Graphics2D // Method untuk me-render objek (Shape: garis, elipse, kotak, dsb) void draw(Shape s) // Method untuk me-render dan memberikan warna pada objek Shape void fill(Shape s) // Method untuk mengeset transformasi (translasi, rotasi, scaling) void setTransform(AffineTransform Tx) void transform(AffineTransform Tx) // Method untuk mengeset Paint (Warna, Gradient Fill, dsb) void setPaint(Paint p) // Method untuk mengeset stroke (garis, korner, titik-titik dsb) void setStroke(Stroke s) // Set clip untuk objek saat ini void clip(Shape s) // Set Composite
2
void setComposite(Composite c) // Menambahkan rendering hints (anti alias, dsb) void addRenderingHints(Map hints)
Pada gambar 1 ditampilkan contoh penerapan Stroke, Paint, Transform pada object Grafik. Sedangkan pada gambar 21 ditampilkan obejek-objek shapes yang ada pada class Graphics2D. Masingmasing class bertugas untuk memodelkan objek grafik, kemudian untuk menampilkan tinggal memanggil method Graphics2D.draw(Shape s).
Figure 1: Stroke, Fill (Paint) dan Transform
Figure 2: Berbagai macam Shapes pada class Graphics2D
2
Praktikum
Buatlah program untuk menampilkan objek-objek seperti pada gambar 3 berikut ini. Gunakanlah template pada Listing 3 dan Listing 4 kemudian tambahkan kode yang diperlukan untuk menggambarkan objek-objek tersebut pada method paintComponent. 1
Diambil dari buku: Computer Graphics using Java 2D and 3D
3
Listing 3: class Main 1 2 3 4 5
//import package yang diperlukan import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*;
6 7 8 9 10 11
public class Main { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setTitle("Aplikasi Komputer Grafik"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
12
//tambahkan canvas GrafikCanvas canvas = new GrafikCanvas(); frame.getContentPane().add(canvas); frame.pack(); frame.setVisible(true);
13 14 15 16 17
}
18 19
}
Listing 4: class GrafikKanvas 1 2 3 4 5
//import package yang diperlukan import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*;
6 7 8 9 10 11 12 13 14 15 16 17 18
public class GrafikCanvas extends JPanel { public GrafikCanvas() { this.setPreferredSize(new Dimension(400, 400)); this.setBackground(Color.WHITE); } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; // kode render grafik objek // ... } }
4
Figure 3: Berbagai macam geometry
5