Desember 11, 2014

Make Over Swing - Menambahkan render efek tulisan pada jTextField dan jPasswordField

Make Over Swing pada dasarnya hanya merubah Field Standar Java Swing, menjadi yang kita inginkan atau kita butuhkan dalam membangun sebuah aplikasi.  Pada postingan ini saya ingin berbagi untuk menambahkan Efek tulisan pada jTextField dan jPasswordField.

Tujuan melakukan Make Over ini  adalah untuk menambah daya tarik pada aplikasi java yang kita buat yaitu dengan  memberi penambahan detail pada komponen java yang kita pakai. memang saat ini sudah banyak library yang menyediakan class yang kita butuhkan untuk mempercantik tampilan kita (contohnya SwingX). Tapi menurut saya  tidak ada salahnya jika kita membuat sendiri  komponen-komponen tersebut agar bisa disesuaikan dan di modifikasi sesuai kebutuhan.

Untuk memberikan Efek tulisan pada Komponen Swing membutuhkan Scrip drawString ini
@Override
protected void paintComponent(Graphics g) {
   super.paintComponent(g);
       
   if (getText().trim().equals("")) {
      Font font = getFont().deriveFont(Font.PLAIN).deriveFont(Font.ITALIC);

      Graphics2D g2d = (Graphics2D) g;
      FontMetrics fontMetrics = g2d.getFontMetrics(font);
      RenderingHints hints = new RenderingHints(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);      
      hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);      
      hints.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);      
      hints.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);      
      hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
      g2d.setRenderingHints(hints);
      g2d.setColor(Color.LIGHT_GRAY);
      g2d.setFont(font);

      java.awt.geom.Rectangle2D rect = fontMetrics.getStringBounds(TextRender, g2d);
      int textHeight = (int) rect.getHeight();
      // untuk mempainting jTextFiled agar menambahkan Text yang di inginkan
      g2d.drawString(TextRender, 7, textHeight + textHeight / 4);
   }
}

Untuk lebih jelasnya, berikut Script untuk jTextFieldCustom dan jPasswordFieldCustom
jTextFieldCustom.java
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package javabego.examp;

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JTextField;
import javax.swing.text.Document;

/**
 *
 * @author eryckgusdian
 * CopyRight© 2014  javabego
 * Semua isi dalam file ini adalah milik Eryck Gusdian.
 * Pemilik tidak bertanggung jawab jika Anda menyalah gunakan file ini
 * dan Pemilik TIDAK MENJAMIN apapun atas file ini.
 *
 * Anda dapat menghubungi pemilik hak cipta ini : 
 * E-mail : javabego@gmail.com
 * Blog : http://javabego.blogspot.com/
 */

public class jTextFieldCustom extends JTextField{
    private static final long serialVersionUID = 1L;
    private String TextRender = "jTextFieldCustom";

    public jTextFieldCustom() {
        initListener();
    }

    public jTextFieldCustom(String text) {
        super(text);
        initListener();
    }

    public jTextFieldCustom(int columns) {
        super(columns);
        initListener();
    }

    public jTextFieldCustom(String text, int columns) {
        super(text, columns);
        initListener();
    }

    public jTextFieldCustom(Document doc, String text, int columns) {
        super(doc, text, columns);
        initListener();
    }

    private void initListener() {
        addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                super.keyPressed(e);
                repaint();
            }
        });
    }

    public String getTextRender() {
        return TextRender;
    }

    public void setTextRender(String placeholder) {
        this.TextRender = placeholder;
        repaint();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        
        if (getText().trim().equals("")) {
            Font font = getFont().deriveFont(Font.PLAIN).deriveFont(Font.ITALIC);

            Graphics2D g2d = (Graphics2D) g;
            FontMetrics fontMetrics = g2d.getFontMetrics(font);
            RenderingHints hints = new RenderingHints(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);      
            hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);      
            hints.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);      
            hints.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);      
            hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
            g2d.setRenderingHints(hints);
            g2d.setColor(Color.LIGHT_GRAY);
            g2d.setFont(font);

            java.awt.geom.Rectangle2D rect = fontMetrics.getStringBounds(TextRender, g2d);
            int textHeight = (int) rect.getHeight();
            // untuk mempainting jTextFiled agar menambahkan Text yang di inginkan
            g2d.drawString(TextRender, 7, textHeight + textHeight / 4);
        }
    }
}
jPasswordFieldCustom.java
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package javabego.examp;

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JPasswordField;

/**
 *
 * @author eryckgusdian
 * CopyRight© 2014  javabego
 * Semua isi dalam file ini adalah milik Eryck Gusdian.
 * Pemilik tidak bertanggung jawab jika Anda menyalah gunakan file ini
 * dan Pemilik TIDAK MENJAMIN apapun atas file ini.
 *
 * Anda dapat menghubungi pemilik hak cipta ini : 
 * E-mail : javabego@gmail.com
 * Blog : http://javabego.blogspot.com/
 */
public class jPasswordFieldCustom extends JPasswordField{
    private static final long serialVersionUID = 1L;
    private String TextRender = "jPasswordFieldCustom";

    public jPasswordFieldCustom() {
        initListener();
    }

    public jPasswordFieldCustom(String text) {
        super(text);
        initListener();
    }

    public jPasswordFieldCustom(int columns) {
        super(columns);
        initListener();
    }

    public jPasswordFieldCustom(String text, int columns) {
        super(text, columns);
        initListener();
    }

    private void initListener() {
        addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                super.keyPressed(e);
                repaint();
            }
        });
    }

    public String getTextRender() {
        return TextRender;
    }

    public void setTextRender(String placeholder) {
        this.TextRender = placeholder;
        repaint();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        if ((new String(getPassword())).trim().equals("")) {
            Font font = getFont().deriveFont(Font.PLAIN).deriveFont(Font.ITALIC);

            Graphics2D g2d = (Graphics2D) g;
            FontMetrics fontMetrics = g2d.getFontMetrics(font);
            RenderingHints hints = new RenderingHints(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);      
            hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);      
            hints.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);      
            hints.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);      
            hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
            g2d.setRenderingHints(hints);
            g2d.setColor(Color.LIGHT_GRAY);
            g2d.setFont(font);

            java.awt.geom.Rectangle2D rect = fontMetrics.getStringBounds(TextRender, g2d);
            int textHeight = (int) rect.getHeight();
            // untuk mempainting jPasswordFiled agar menambahkan Text yang di inginkan
            g2d.drawString(TextRender, 7, textHeight + textHeight / 4);
        }
    }
}
Untuk menggunakan jTextFieldCustom dan jPasswordFieldCustom buat sebuah form dan tambahkan komponen custom tadi dengan cara di Tarik/Drag ke Form sama halnya dengan dengan  menambahkan jTextField biasa dari Palette Swing.

Dan untuk merubah Render Text  pada komponen, pilih Propertis - textRender dan ubah text sesuai keinginan.

jalankan demo Form atau tekan F6 pada keyboard.

Silahkan unduh Source-nya disini
https://drive.google.com/file/d/0B1wwNkjrVkW4dWVVMl83S1E5ck0/view?usp=sharing

0 comments:

Posting Komentar

 
Copyright © 2014 by Eryck Gusdian - javabego