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.
@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
0 comments:
Posting Komentar