Text dan Font di Java 2D

Wednesday, May 11, 2016
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 :

Share this :

Previous
Next Post »
0 Komentar

Penulisan markup di komentar
  • Silakan tinggalkan komentar sesuai topik. Komentar yang menyertakan link aktif, iklan, atau sejenisnya akan dihapus.
  • Untuk menyisipkan kode gunakan <i rel="code"> kode yang akan disisipkan </i>
  • Untuk menyisipkan kode panjang gunakan <i rel="pre"> kode yang akan disisipkan </i>
  • Untuk menyisipkan quote gunakan <i rel="quote"> catatan anda </i>
  • Untuk menyisipkan gambar gunakan <i rel="image"> URL gambar </i>
  • Untuk menyisipkan video gunakan [iframe] URL embed video [/iframe]
  • Kemudian parse kode tersebut pada kotak di bawah ini
  • © 2015 Simple SEO ✔

Ads