MEMANIPULASI BENTUK TEKS Hak Cipta Dokumen © 2007 javaku.wordpress.com dan Adi Purnomo Dukumen ini dapat digunakan, dirubah, maupun disebarkan secara bebas untuk tujuan apa saja baik itu bersifat komersial maupun tidak komersial, dengan syarat selalu menyertakan nama penulis dan judul asli dari tulisan ini. Java menyediakan beberapa kelas untuk memanipulasi teks, dengan kelas ini kita dapat memanipulasi bentuk, sudut, ukuran dan latar belakang dari teks. Kelas itu terdapat pada package java.text. Pada kesempatan ini, saya akan membuat dan membahas beberapa bentuk dan ukuran teks yang berbeda-beda, mengatur sudut teks sehingga tampilan posisi teks lebih dinamis. Selain bentuk 2D, kita akan membuat teks yang bersifat 3D. Listing keseluruhan program dari contoh membuat teks (teks2D.java) adalah sebagai berikut : import javax.swing.*; import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.text.AttributedCharacterIterator; import java.text.AttributedString; import java.awt.font.TextAttribute; public class teks2D extends JFrame { // Konstruktor public teks2D() { } // MAIN public static void main(String[] args) { teks2D t2d = new teks2D(); t2d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); t2d.setTitle("Teks 2D Java"); t2d.setSize(550, 325); t2d.show(); } /** * Methode paint * Ket : Untuk Menggambar Objek pada Layar * @param g2 Graphics */ public void paint(Graphics g2) { // Teks yang akan dimodifikasi String text1 = "Ini Teks Grafis dengan Java2D,"; String text2 = "JAVA memang OK Ghitu Lho... "; // AttributedString as1 = new AttributedString(text1); AttributedString as2 = new AttributedString(text2); AttributedCharacterIterator aci1, aci2; // Memodifikasi Teks "Ini" Font font = new Font("sanserif", Font.BOLD | Font.ITALIC, 60); int index = text1.indexOf("Ini"); as1.addAttribute(TextAttribute.FONT, font, index, index + 1); as1.addAttribute(TextAttribute.FOREGROUND, Color.BLUE, index, index + 3); font = new Font("sanserif", 2, 30); as1.addAttribute(TextAttribute.FONT, font, index + 1, index + 3); // Memodifikasi Teks "Teks" index = text1.indexOf("Teks"); font = new Font("Dialog", 1, 30); as1.addAttribute(TextAttribute.FONT, font, index, index + 4); as1.addAttribute(TextAttribute.FOREGROUND, Color.CYAN, index, index + 4); // Memodifikasi Teks "Grafis" index = text1.indexOf("Grafis"); font = new Font("serif", Font.BOLD, 20); as1.addAttribute(TextAttribute.FONT, font, index, index + 6); as1.addAttribute(TextAttribute.FOREGROUND, Color.red, index, index + 6); // Memodifikasi Teks "dengan" index = text1.indexOf("dengan"); AffineTransform fontAT = new AffineTransform(); fontAT.rotate(Math.toRadians(15)); Font fx = new Font("serif", Font.BOLD, 30).deriveFont(fontAT); as1.addAttribute(TextAttribute.FONT, fx, index, index + 6); // Memodifikasi Teks "Java2D" index = text1.indexOf("Java2D,"); font = new Font("Terminal", 3, 50); as1.addAttribute(TextAttribute.FONT, font, index, index + 7); as1.addAttribute(TextAttribute.BACKGROUND, Color.yellow, index, index + 7); // Memodifikasi Teks "JAVA" index = text2.indexOf("JAVA"); font = new Font("serif", Font.BOLD | Font.ITALIC, 40); as2.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON, index, index + 4); as2.addAttribute(TextAttribute.FOREGROUND, Color.magenta, index, index + 4); as2.addAttribute(TextAttribute.FONT, font, index, index + 4); as2.addAttribute(TextAttribute.BACKGROUND, Color.GREEN, index, index + 2); as2.addAttribute(TextAttribute.BACKGROUND, Color.orange, index + 2, index + 4); // Memodifikasi Teks "memang" index = text2.indexOf("memang"); font = new Font("Dialog", 1, 40); as2.addAttribute(TextAttribute.FOREGROUND, Color.ORANGE, index, index + 6); as2.addAttribute(TextAttribute.FONT, font, index, index + 6); as2.addAttribute(TextAttribute.BACKGROUND, Color.RED, index, index + 6); // Memodifikasi Teks "OK" index = text2.indexOf("OK"); } AffineTransform fontAT1 = new AffineTransform(); fontAT1.rotate(Math.toRadians( -60)); Font fx1 = new Font("serif", Font.BOLD, 40).deriveFont(fontAT1); as2.addAttribute(TextAttribute.FONT, fx1, index, index + 2); // Memodifikasi Teks "Ghitu Lho..." int i = text2.indexOf(" Ghitu"); BufferedImage bi = new BufferedImage(3, 3, BufferedImage.TYPE_INT_ARGB); bi.setRGB(0, 0, 0xffff0000); TexturePaint tp = new TexturePaint(bi, new Rectangle(0, 0, 3, 3)); as2.addAttribute(TextAttribute.BACKGROUND, tp, i, text2.length()); font = new Font("serif", Font.BOLD, 30); as2.addAttribute(TextAttribute.FONT, font, i, text2.length()); as2.addAttribute(TextAttribute.FOREGROUND, Color.white, i, text2.length()); // Mengambil Iterator dati AttributeString aci1 = as1.getIterator(); aci2 = as2.getIterator(); // Menulis Teks pada Layar g2.drawString(aci1, 20, 100); g2.drawString(aci2, 20, 190); g2.setFont(new Font("Tahoma", 1, 70)); // Membuat teks "TERNATE" (3D) g2.setColor(Color.black); g2.drawString("TERNATE", 59, 287); g2.setColor(Color.yellow); g2.drawString("TERNATE", 57, 290); g2.setColor(Color.BLUE); g2.drawString("TERNATE", 55, 293); } // Akhir Kelas Eksekusi dan menjalankan program javac teks2D.java java teks2D Tampilan Program teks2D.java Dari hasil eksekusi program di atas dapat dijelaskan langkah-langkah pembuatan dari program teks2D.java adalah sebagai berikut : MEMBUAT KELAS Nama kelas adalah teks2D karena nama file yang disimpan diberinama teks2D.java. Aplikasi ini dirancang dengan menggunakan JFrame, sehingga pada pembuatan kelas harus dilakukan perluasan ke JFrame (extends JFrame). public class teks2D extends JFrame { ........ ........ } PAINT Methode ini berfungsi untuk melakukan penggambaran berupa obyek pada frame atau layar. Nama dari methode ini adalah paint(), methode ini akan secara otomatis dipanggil pada saat aplikasi dijalankan, sehingga kita tidak perlu melakukan pemanggilan terhadap methode ini. public void paint(Graphics g2) { ....... ...... } Sebelum kita memulai untuk memodifikasi teks, terlebih dahulu kita harus membuat teks yang akan dimodifikasi. String text1 = "Ini Teks Grafis dengan Java2D,"; String text2 = "JAVA memang OK Ghitu Lho... "; Untuk melakukan modifikasi teks, kita akan menggunakan kelas AttributedString dan AttributedCharacterIterator yang terdapat pada package java.teks. AttributedString digunakan untuk melakukan modifikasi terhadap teks baik itu berupa bentuk, warna dan lain-lain. Sedangkan AttributedCharacterIterator digunakan untuk menampung data-data yang terdapat pada AttributedString. AttributedString as1 = new AttributedString(text1); AttributedString as2 = new AttributedString(text2); AttributedCharacterIterator aci1, aci2; Selanjutnya kita akan melakukan pemodifikasian terhadap teks-teks yang telah kita buat pada obyek text1. Methode yang digunakan untuk memodifikasi teks dengan kelas AttributedString adalah addAttribute(AttributedCharacterIterator.Attribute atrb, Object value, int beginIndex, int endIndex). Modifikasi teks “Ini” Mengambil nilai index teks “Ini” yang terdapat pada obyek teks1, nilai yang dihasilkan berupa interger. int index = text1.indexOf("Ini"); Modifikasi huruf I dengan pengaturan nilai hurufnya adalah berjenis sanserif, berbentuk BOLD (tebal), dan berukuran 60 pt. Font font = new Font("sanserif", Font.BOLD | Font.ITALIC, 60); as1.addAttribute(TextAttribute.FONT, font, index, index + 1); Modifikasi huruf ni dengan pengaturan nilai hurufnya adalah berjenis sanserif, berbentuk ITALIC (miring), dan berukuran 30 pt. font = new Font("sanserif", 2, 30); as1.addAttribute(TextAttribute.FONT, font, index + 1, index + 3); Menjadikan teks Ini berwarna biru. as1.addAttribute(TextAttribute.FOREGROUND, Color.BLUE, index, index + 3); Modifikasi teks “Teks” Mengambil nilai index teks “Teks” yang terdapat pada obyek teks1, nilai yang dihasilkan berupa interger. index = text1.indexOf("Teks"); Modifikasi teks Teks dengan pengaturan nilai hurufnya adalah berjenis Dialog, berbentuk BOLD (tebal), dan berukuran 30 pt, serta warna teksnya adalah CYAN. font = new Font("Dialog", 1, 30); as1.addAttribute(TextAttribute.FONT, font, index, index + 4); as1.addAttribute(TextAttribute.FOREGROUND, Color.CYAN, index, index + 4); Modifikasi teks “Grafis” Mengambil nilai index teks “Grafis” yang terdapat pada obyek teks1, nilai yang dihasilkan berupa interger. index = text1.indexOf("Grafis"); Modifikasi teks Grafis dengan pengaturan nilai hurufnya adalah berjenis serif, berbentuk BOLD (tebal), dan berukuran 20 pt, serta warna teksnya adalah RED. font = new Font("serif", Font.BOLD, 20); as1.addAttribute(TextAttribute.FONT, font, index, index + 6); as1.addAttribute(TextAttribute.FOREGROUND, Color.red, index, index + 6); Modifikasi teks “dengan” Mengambil nilai index teks “dengan” yang terdapat pada obyek teks1, nilai yang dihasilkan berupa interger. index = text1.indexOf("dengan"); Modifikasi teks dengan dengan pengaturan nilai hurufnya adalah berjenis serif, berbentuk BOLD (tebal), dan berukuran 30 pt, serta warna teksnya adalah RED. Posisi dari teks ini adalah berputar sebesar 150 dari titik x = 00, methode yang digunakan adalah rotate(double tetha) dari kelas java.awt.geom.AffineTransform yang kemudian diikuti dengan methode deriveFont(AffineTransform trns) dari kelas java.awt.Font. AffineTransform fontAT = new AffineTransform(); fontAT.rotate(Math.toRadians(15)); Font fx = new Font("serif", Font.BOLD, 30).deriveFont(fontAT); as1.addAttribute(TextAttribute.FONT, fx, index, index + 6); Modifikasi teks “Java2D” Mengambil nilai index teks “java2D” yang terdapat pada obyek teks1, nilai yang dihasilkan berupa interger. index = text1.indexOf("java2D"); Modifikasi teks java2D dengan pengaturan nilai hurufnya adalah berjenis Terminal, berbentuk BOLD-ITALIC (tebal dan miring), dan berukuran 50 pt, warna latar belakang dari teks adalah YELLOW. font = new Font("Terminal", 3, 50); as1.addAttribute(TextAttribute.FONT, font, index, index + 7); as1.addAttribute(TextAttribute.BACKGROUND, Color.yellow, index, index + 7); Selanjutnya kita akan melakukan pemodifikasian terhadap teks-teks yang telah kita buat pada obyek text2. Modifikasi teks “Java” Mengambil nilai index teks “Java” yang terdapat pada obyek teks1, nilai yang dihasilkan berupa interger. int index = text1.indexOf("Java"); Modifikasi teks Java dengan pengaturan nilai hurufnya adalah berjenis serif, berbentuk ITALIC (tebal), dan berukuran 40 pt, serta bergaris bawah (UNDERLINE) dan warna teksnya adalah MAGENTA. font = new Font("serif", Font.BOLD | Font.ITALIC, 40); as2.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON, index, index + 4); as2.addAttribute(TextAttribute.FOREGROUND, Color.magenta, index, index + 4); Modifikasi huruf Ja denga latar belakang berwarna GREEN dan huruf va dengan latar belakang berwarna ORANGE. as2.addAttribute(TextAttribute.BACKGROUND, Color.GREEN, index, 2); index + as2.addAttribute(TextAttribute.BACKGROUND, Color.orange, index + 2, index + 4); Modifikasi teks “memang” Mengambil nilai index teks “java2D” yang terdapat pada obyek teks1, nilai yang dihasilkan berupa interger. index = text1.indexOf("memang"); Modifikasi teks java2D dengan pengaturan nilai hurufnya adalah berjenis Terminal, berbentuk BOLD (tebal), dan berukuran 40 pt, warna teks adalah ORANGE serta warna latar belakang adalah RED. + 6); font = new Font("Dialog", 1, 40); as2.addAttribute(TextAttribute.FOREGROUND, Color.ORANGE, index, index as2.addAttribute(TextAttribute.FONT, font, index, index + 6); as2.addAttribute(TextAttribute.BACKGROUND, Color.RED, index, index + 6); Modifikasi teks “OK” Mengambil nilai index teks “dengan” yang terdapat pada obyek teks1, nilai yang dihasilkan berupa interger. index = text1.indexOf("OK"); Modifikasi teks dengan dengan pengaturan nilai hurufnya adalah berjenis serif, berbentuk BOLD (tebal), dan berukuran 40 pt. Posisi dari teks ini akan berputar sebesar -600 dari titik x = 00. AffineTransform fontAT1 = new AffineTransform(); fontAT1.rotate(Math.toRadians( -60)); Font fx1 = new Font("serif", Font.BOLD, 40).deriveFont(fontAT1); as2.addAttribute(TextAttribute.FONT, fx1, index, index + 2); Modifikasi teks “Ghitu Lho...” Mengambil nilai index teks “java2D” yang terdapat pada obyek teks1, nilai yang dihasilkan berupa interger. index = text1.indexOf(" Ghitu"); Modifikasi teks Ghitu Lho... dengan pengaturan warna teks adalah ORANGE serta warna latar belakang adalah berbentuk objek berupa titik berwarna WHITE. BufferedImage bi = new BufferedImage(3, 3, BufferedImage.TYPE_INT_ARGB); bi.setRGB(0, 0, 0xffff0000); TexturePaint tp = new TexturePaint(bi, new Rectangle(0, 0, 3, 3)); as2.addAttribute(TextAttribute.BACKGROUND, tp, i, text2.length()); font = new Font("serif", Font.BOLD, 30); as2.addAttribute(TextAttribute.FONT, font, i, text2.length()); as2.addAttribute(TextAttribute.FOREGROUND, Color.white, i, text2.length()); Mengambil nilai Iterator dari AttributedString dengan menggunakan methode getIterator(). aci1 = as1.getIterator(); aci2 = as2.getIterator(); Kemudian menuliskan hasil tersebut ke layar dengan menggunakan methode : drawString(AttributedCharacterIterator iterator, int x, int y). g2.drawString(aci1, 20, 100); g2.drawString(aci2, 20, 190); Selanjutnya kita akan membuat teks berbentuk 3 Dimensi. Pada proses ini kita akan menggabungkan 3 buah teks yang sejenis tetapi posisi dan warnanya berbedabeda sehingga membentuk teks 3 Dimensi. g2.setFont(new Font("Tahoma", 1, 70)); g2.setColor(Color.black); g2.drawString("TERNATE", 59, 287); g2.setColor(Color.yellow); g2.drawString("TERNATE", 57, 290); g2.setColor(Color.BLUE); g2.drawString("TERNATE", 55, 293);