Membuat efek tulisan pada komponen TextField (Placeholder) di Java | Tempat Belajar dan Berbagi Pengetahuan Java dan PHP
Home » , , , » Membuat efek tulisan pada komponen TextField (Placeholder) di Java

Membuat efek tulisan pada komponen TextField (Placeholder) di Java

Dipostingkan Oleh Ridwan Labs pada Rabu, 30 Januari 2013 - Diupdate Pada: 1/30/2013

Untuk menambah daya tarik pada aplikasi java yang kita buat, perlu di tambahkan komponen-komponen lain. salah satunya adalah 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 tidak ada salahnya jika kita membuat sendiri elemen-elemen tersebut agar bisa di modifikasi dan disesuaikan dengan kebutuhan kita.

Salah satunya dalah Place holder (entah nama ini benar atau tidak hehe) kalau salah silahkan diingatkan. placeholder yang saya maksud adalah tulisan pada bagian tengan komponen TextField. berikut contohnya:
Membuat efek tulisan pada komponen TextField (Placeholder) di Java

Nah bagai mana cara membuat efek tulisan tersebut di komponen TextField java?. idenya sih sederhana kita bisa meng-overide method paint() kemudian menggunakan method drawString().
Oke ini dia kodenya:

Font font = getFont().deriveFont(Font.BOLD).deriveFont(Font.ITALIC);
Graphics2D g2d = (Graphics2D) g;
FontMetrics fontMetrics = g2d.getFontMetrics(font);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(Color.GRAY);
g2d.setFont(font);
java.awt.geom.Rectangle2D rect = fontMetrics.getStringBounds("TEXT YANG DIINGINKAN", g2d);
int textHeight = (int) rect.getHeight();
g2d.drawString("TEXT YANG DIINGINKAN", 5, textHeight + 3);

Tapi kalo di perhatikan, ketika kita mengetikan sesuatu maka efek tulisan itu harus hilang, karena jika tetap muncul maka akan mengganggu tampilan teks yang ada maka di dalam fungsi paint tesebut kita perlu menambahkan sebuah kondidi. jadi kodenya di ubah menjadi sebagai berikut:
if ((new String(getPassword())).trim().equals("")) {
Font font = getFont().deriveFont(Font.BOLD).deriveFont(Font.ITALIC);
Graphics2D g2d = (Graphics2D) g;
FontMetrics fontMetrics = g2d.getFontMetrics(font);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(Color.GRAY);  
g2d.setFont(font);         
java.awt.geom.Rectangle2D rect = fontMetrics.getStringBounds("TEXT YANG
DIINGINKAN", g2d);
int textHeight = (int) rect.getHeight();
g2d.drawString("TEXT YANG DIINGINKAN", 5, textHeight + 3);
}
Bingung?, oke berikut kode lengkapnya supaya tidak bingung.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javadanphp.swing;

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 Taopik Ridwan
 */

public class CustomTextField extends JTextField {

private String placeholder = "Masukan Teks";

    public CustomTextField() {

       
initListener();

    }



    public CustomTextField(String text) {

       
super(text);

       
initListener();

    }



    public CustomTextField(int columns) {

       
super(columns);

       
initListener();

    }



    public CustomTextField(String text, int
columns) {

       
super(text, columns);

       
initListener();

    }
    
public CustomTextField(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 getPlaceholder() {

       
return placeholder;

    }



    public void setPlaceholder(String
placeholder) {

       
this.placeholder = placeholder;

        repaint();

    }



    @Override

    protected void paintComponent(Graphics
g) {

       
super.paintComponent(g);

       

       
if (getText().trim().equals("")) {
Font font = getFont().deriveFont(Font.BOLD).deriveFont(Font.ITALIC);



           
Graphics2D g2d = (Graphics2D) g;

 
FontMetrics fontMetrics = g2d.getFontMetrics(font);

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);

g2d.setColor(Color.GRAY);

g2d.setFont(font);



java.awt.geom.Rectangle2D rect =
fontMetrics.getStringBounds(placeholder, g2d);

int textHeight = (int) rect.getHeight();

g2d.drawString(placeholder, 5, textHeight + 3);

}

}

}



Ini dia Hasilnya:
Membuat efek tulisan pada komponen TextField (Placeholder) di Java

Membuat efek tulisan pada komponen TextField (Placeholder) di Java

Jika agan-agan sekalian menggunakan Netbeans, maka jika akan menggunakan komponen tadi, kita tinggal Drag and drop saja.
Membuat efek tulisan pada komponen TextField (Placeholder) di Java

Selain itu untuk merubah tulisannya kita tinggal melakukannnya di panel Properties
Membuat efek tulisan pada komponen TextField (Placeholder) di Java


Silahkan Di Download Kode Sumbernya (Dibuat menggunakan Netbeans 7.2)
Share this article :

5 komentar:

  1. gan . .gimana ngasih icon pada teksfield?

    BalasHapus
    Balasan
    1. Lebih gampang gan (kodenya lebih dikit), tinggal ganti saja kode ini (pada method )
      -----------------------------------
      Font font = getFont().deriveFont(Font.BOLD).deriveFont(Font.ITALIC);

      Graphics2D g2d = (Graphics2D) g;

      FontMetrics fontMetrics = g2d.getFontMetrics(font);

      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
      RenderingHints.VALUE_ANTIALIAS_ON);

      g2d.setColor(Color.GRAY);

      g2d.setFont(font);


      java.awt.geom.Rectangle2D rect = fontMetrics.getStringBounds(placeholder, g2d);

      int textHeight = (int) rect.getHeight();

      g2d.drawString(placeholder, 5, textHeight + 3);
      -----------------------------------

      sama kode ini:
      -----------------------------------
      icon = new ImageIcon(getClass().getResource("/textfieldicon/images/print.png")).getImage();
      Graphics2D g2d = (Graphics2D) g;

      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      g2d.drawImage(icon, (getWidth() - icon.getWidth(null) - 5), 5, null);
      -----------------------------------

      ubah nama iconnya dengan yang agan mau

      inni screenshootnya:
      http://goo.gl/i3KfV

      ini contoh kodenya yang pake icon
      http://goo.gl/xCyLh

      Semoga bermanfaat

      Hapus
    2. Saya menggunakan netbeans IDE 8.0.2 tapi pada propertiesnya ga ada placeholdernya, gimana ya gan?

      Hapus
  2. gan, saya kan pake netbean IDE 8.1 , tp kok saya cari d panel properties ga ada placeholder nya ya?
    kalo boleh tau agan pake netbean versi berapa? dan apa mungkin ada yg harus d tambahkan supaya opsi placeholdernya bs ada d panel properties? makasih

    BalasHapus
  3. om, itu scriptnya buat semuanya? maksudnya kan ane nih di jframeform ane punya 2 panel.. 1 panel buat register 1 lagi panel buat log in itu masukin script yg itu sekali aja apa gimana?

    BalasHapus

Cari Artikel



 
Support : Admin
Copyright © 2013. Tempat Belajar dan Berbagi Pengetahuan Java dan PHP - All Rights Reserved
Template Created by Creating Website Modified by CaraGampang.Com
Proudly powered by Blogger