BAB 4 PEWARNAAN Anda telah mempelajari bagaimana membuat objek geometri sederhana dan bentuk-bentuk kompleks lainnya serta cara menentukan tipe-tipe garis (stroke) pada grafik. Dalam modul berikutnya akan dibahas tentang cara menambahkan beberapa warna. Materi yang dipelajari meliputi pengisian warna (filling) yang diterapkan dalam pembuatan objek geometri. 4.1 WARNA Ketika objek geometri dibangun, objek tersebut dapat digambar dengan method fill(Shape) atau draw(Shape) dalam Graphics2D. Untuk menentukan warna yang diganakan untuk menggambar objek, method dari kelas Graphics berikut bisa digunakan: void setColor(Color c) Objek Color mendefinisikan sebuah warna. Kelas Color secara default menggunakan rentang warna RGB, sebagai rentang warna standard. Warna yang terdiri dari Merah (Red), Hijau(Green), Biru(Blue) dan komponen Alfa (Alpha). Komponen alpha mendefinisikan tingkat transparansi warna tersebut. Kelas Color mendefinisikan nilai warna konstanta(constant) berikut:: black blue cyan darkGray gray green lightGray magenta orange pink red white yellow Nama tersebut tidak mengikuti konvensi(convention) penamaan Java, yang mengatur bahwa konstanta harus dalam huruf kapital. Sejak JDK 1.4, Anda bisa juga menggunakan konstanta baru: BLACK, BLUE, CYAN, DARK_GRAY, GREEN, LIGHT_GRAY, MAGENTA, ORANGE, PINK, RED, WHITE, and YELLOW. Warna lain dengan mudah dapat dibangun menggunakan satu dari banyak konstruktor kelas Color. Anda bisa langsung menentukan(specify) nilai RGB menggunakan konstruktor berikut: Color(int r, int g, int b); Color(int rgb); Color(float r, float g, float b); Versi pertama untuk menentukan ketiga komponen warna menggunakan nilai int dengan rentang 0-255. Versi kedua mirip dengan yang pertama, tetapi ketiga nilainya dijadikan di-paket-kan dalam satu nilai int. Versi ketiga menggunakan nilai float di rentang 0.0 – 1.0 untuk mendefinisikan komponen warnanya. Konstruktor lain dari kelas Color mengijikan spesifikasi ruang warna. Color(ColorSpace colorSpace, float[] components, float alpha); Berikut adalah potongan program untuk menggambar tiga bujursangkar dengan warna berbeda: public void paintComponent(Graphics g) { g.setColor(Color.red); g.draw(new Rectangle(0, 0, 100, 100)); g.setColor(new Color(0, 255, 128)); g.draw(new Rectangle(100, 0, 100, 100)); g.setColor(new Color(0.5f, 0.0f, 1.0f)); g.draw(new Rectangle(200, 0, 100, 100)); } Berikut listing lengkap dari program di atas. Listing tersebut menunjukkan sebuah program yang mendemonstrasikan gambar sebuah objek geometris dengan warna garis yang berbeda-beda. Listing 4.1 TestStrokeGeom.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.font.*; import java.awt.geom.*; public class TestStrokeGeom extends JApplet { public static void main(String s[]) { JFrame frame = new JFrame(); frame.setTitle("Test Stroke-2"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JApplet applet = new TestStrokeGeom(); 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; g2.setColor(Color.red); g2.draw(new Rectangle(0, 0, 100, 100)); g2.setColor(new Color(0, 255, 128)); g2.draw(new Rectangle(100, 0, 100, 100)); g2.setColor(new Color(0.5f, 0.0f, 1.0f)); g2.draw(new Rectangle(200, 0, 100, 100)); } } Latihan: Ketiklah kode program diatas. Kemudian compile dan jalankan. Apa yang dihasilkan oleh program tersebut? Jelaskan! Jawab: ____________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________ Berikut listing lengkap dari program yang mendemonstrasikan gambar sebuah objek geometris dengan warna garis yang berbeda dengan warna area bidang-nya. Listing 4.1 SegiPanjangWarna.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.font.*; import java.awt.geom.*; public class SegiPanjangWarna extends JApplet { public static void main(String s[]) { JFrame frame = new JFrame(); frame.setTitle("Persegi Panjang Warna"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JApplet applet = new SegiPanjangWarna(); 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 persegipanjang. Rectangle2D.Double persegipanjang = new Rectangle2D.Double(300,100,100,50); g2.setColor(Color.GREEN); g2.fill(persegipanjang); g2.setColor(Color.blue); g2.setStroke(new BasicStroke(3.0f)); g2.draw(persegipanjang); } } Latihan: Ketiklah kode program diatas. Kemudian compile dan jalankan. Apa yang dihasilkan oleh program tersebut? Jelaskan! Jawab: ____________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________ 4.1 KELAS GradientPaint Kelas GradientPaint mendefinsikan jenis warna dengan warna yang bermacam-macam. Warna gradien ditetapkan oleh dua poin dan dua warna. Ketika lokasi warna berpindah dari poin pertama ke poin kedua, warna berubah secara berangsur-angsur pula dari warna yang pertama ke yang warna yang kedua. Warna gradien dapat siklis (cyclic) atau tidak siklis (acyclic). Warna gradien siklis berulang dengan pola yang sama secara periodik. Untuk membuat warna gradien tidak siklis (acyclic), konstruktor berikut dapat digunakan: GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2); Untuk membuat warna gradien siklis (cyclic), dapat digunakan konstruktor berikut: GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2, boolean); Berikut adalah contoh penerapan kelas GradientPaint dalam sebuah program Java. Listing 4.2 SegipanjangWarnaGradient.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.font.*; import java.awt.geom.*; public class SegiPanjangWarnaGradient extends JApplet { public static void main(String s[]) { JFrame frame = new JFrame(); frame.setTitle("Persegipanjang warna-gradien"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JApplet applet = new SegiPanjangWarnaGradient(); 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 persegipanjang. Rectangle2D.Double persegipanjang = new Rectangle2D.Double(300,100,100,50); //membuat warna gradien tidak siklis (acyclic). GradientPaint warnaGradien = new GradientPaint(300, 50, Color.green, 350, 50, Color.yellow); g2.setPaint(warnaGradien); g2.fill(persegipanjang); g2.setColor(Color.blue); g2.setStroke(new BasicStroke(3.0f)); g2.draw(persegipanjang); //gambar persegipanjang. Rectangle2D.Double persegipanjang2 = new Rectangle2D.Double(100,200, 200,50); //membuat warna gradien siklis (cyclic). GradientPaint warnaGradien2 = new GradientPaint(125,100,Color.green, 150,100,Color.yellow,true); g2.setPaint(warnaGradien2); g2.fill(persegipanjang2); g2.setColor(Color.blue); g2.setStroke(new BasicStroke(3.0f)); g2.draw(persegipanjang2); } } Latihan: Ketiklah kode program diatas. Kemudian compile dan jalankan. Apa yang dihasilkan oleh program tersebut? Jelaskan! Jawab: ____________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________ Berikut contoh penerapan kelas GradientPaint lainnya dalam sebuah program Java. Listing 4.3 SegiPanjangWarnaGradient1.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.font.*; import java.awt.geom.*; public class SegiPanjangWarnaGradient1 extends JApplet { public static void main(String s[]) { JFrame frame = new JFrame(); frame.setTitle("Outline Gradien"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JApplet applet = new SegiPanjangWarnaGradient1(); 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 persegipanjang. Rectangle2D.Double persegipanjang2 = new Rectangle2D.Double(100,200, 200,50); //membuat warna gradien asiklis (acyclic). GradientPaint warnaGradien2 = new GradientPaint(125,100,Color.blue, 175,100,Color.darkGray,false); g2.setStroke(new BasicStroke(10.0f)); g2.setPaint(warnaGradien2); g2.draw(persegipanjang2); } } Latihan: Ketiklah kode program diatas. Kemudian compile dan jalankan. Apa yang dihasilkan oleh program tersebut? Jelaskan! Jawab: ____________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________ Tugas Projek Tahap III Lengkapilah program yang sudah Anda buat sebelumnya dengan menu yang digunakan untuk pengaturan warna garis pada objek geometri yang terpilih untuk ditampilkan. Lihat screenshot berikut: Gambar 3.1 Menu (objek) persegipanjang, (tipe garis) tebal, gradien (warna) terpilih Gambar 3.1 Menu (objek) lingkaran, (tipe garis) tebal, solid (warna) terpilih Keterangan: 1. Tampilan di atas hanya merupakan contoh saja. 2. Dalam tahap III (ketiga) program ditambah kemampuan untuk pewarnaan yang digunakan untuk menampilkan objek geometri saja. 3. Silahkan membuat program menurut kreativitas masing-masing, misalnya: ✔ Ditambah menu “pilihan warna” untuk menentukan warna (merah, kuning, hijau, dll) menggunakan radioButton. ✔ Ditambah TextField yang digunakan untuk menentukan ketebalan garis. ✔ Dll 4. Penambahan menu “warna” diharapkan dapat diselesaikan dalam satu minggu, supaya tidak terbebani pada tahapan projek berikutnya. 5. Happy codding…! --- End of File ---