Selengkapnya - WordPress.com

advertisement
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);
Download