Text dan Font di Java 2D

Java 2D menyediakan kumpulan font dan text yang dapat dimanipulasi sedemikian rupa. Text digambarkan dengan serangkaian karakter dengan pola pengkodean standar sepeti ASCII dan Unicode. Penggambaran bentuk dari karakter ditentukan oleh font standar. Geometri yang menggambarkan bentuk karakter dikenal dengan glyph. Jadi, font adalah kumpulan dari glyph untuk seluruh abjad.
Penggunaan font di Java 2D dapat dilakukan dengan memanggil method setFont dan drawstring di Graphics2D. Font yang tersedia di lingkungan tergantung pada platform. Di Java mendukung beberapa font diantaranya :

Serif
SanSerif
Monospaced
Dialog
DialogInput

Selain itu terdapat parameter style yang memungkinkan untuk memanipulasi bentuk font diantaranya :

PLAIN
ITALIC
BOLD


Berikut ini beberapa contoh source code untuk mendemonstrasikan penggunaan font.
/**
*
* @author Wim Sonevel
*/
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class FontFun1 extends JApplet{
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setTitle("Fonts");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new FontFun1();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}
@Override
public void init(){
JPanel panel = new FontPanel();
getContentPane().add(panel);
}
}
class FontPanel extends JPanel{
FontPanel(){
setPreferredSize(new Dimension(640, 480));
setBackground(Color.white);
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
//menentukan nama, bentuk dan ukuran font
Font font = new Font("Serif", Font.BOLD, 75);
//transformasi affine
AffineTransform tx = new AffineTransform();
tx.shear(0.5, 0.1);
//font turunan hasil modifikasi dengan tranformasi affine
g2.setFont(font.deriveFont(tx));
g2.drawString("Wim Sonevel", 100, 225);
}
}

Outputnya :

/**
*
* @author Wim Sonevel
*/
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.geom.*;
import javax.swing.*;
public class FontFun2 extends JApplet{
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setTitle("Fonts");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new FontFun2();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}
@Override
public void init(){
JPanel panel = new FontPanel2();
getContentPane().add(panel);
}
}
class FontPanel2 extends JPanel{
FontPanel2(){
setPreferredSize(new Dimension(640, 480));
setBackground(Color.white);
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
Font font = new Font("Serif", Font.BOLD|Font.PLAIN|Font.ITALIC, 75);

FontRenderContext frc = g2.getFontRenderContext();
GlyphVector gv = font.createGlyphVector(frc, "Wim Sonevel");
Shape glyph = gv.getOutline(100,100);
g2.setStroke(new BasicStroke(3.0f));
g2.rotate(Math.toRadians(45), 100, 100);
g2.draw(glyph);
g2.setColor(Color.blue);
g2.fill(glyph);
}
}

Output :

/**
*
* @author Wim Sonevel
*/
import javax.swing.*;
import java.awt.*;
import java.awt.font.*;
public class FontFun3 extends JApplet{
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("Font Fun 3");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new FontFun3();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
@Override
public void init(){
JPanel panel = new FontPanel3();
getContentPane().add(panel);
}
}
class FontPanel3 extends JPanel{
public FontPanel3(){
setPreferredSize(new Dimension(600, 500));
setBackground(Color.white);
}
@Override
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g;
Font font = new Font("Serif",Font.BOLD,50);
//font render
FontRenderContext fr = g2.getFontRenderContext();
GlyphVector gv = font.createGlyphVector(fr, "Wim Sonevel");
Shape text = gv.getOutline(100, 100);

g2.setStroke(new BasicStroke(5.0f));
g2.setColor(Color.red);
g2.rotate(Math.toRadians(30),100,100);
g2.draw(text);

}
}

Outputnya :

Post a Comment

Previous Post Next Post