Di Java, Ada 2 jenis TextField(TextBox di VB NET) yakni, JTextField dan JFormattedTextField. Kedua Textfield ini jelaslah berbeda fungsinya. Untuk JTextField ini umumnya digunakan untuk mendapatkan jenis inputan biasa seperti Nama, Alamat, Nomor Handphone dan lain sebagainya yang tidak mengandung unsur...

Belajar Set Currency Format di TextField Java

Di Java, Ada 2 jenis TextField(TextBox di VB NET) yakni, JTextField dan JFormattedTextField. Kedua Textfield ini jelaslah berbeda fungsinya. Untuk JTextField ini umumnya digunakan untuk mendapatkan jenis inputan biasa seperti Nama, Alamat, Nomor Handphone dan lain sebagainya yang tidak mengandung unsur kebakuan. Sedangkan, JFormattedTextField ini berfungsi untuk mendapatkan inputan dari user yang bersifat baku. Yang berarti, inputannya harus benar – benar yang di inginkan oleh si programmer. Saya ambil contoh saja seperti, inputan gaji pokok pegawai. Untuk contoh kasus ini, memang Anda bisa menggunakan JTextField namun, hal itu kuranglah tepat karena si user bisa melakukan penginputan yang tidak sesuai dan walaupun Anda beri blok try – catch hal itu tetaplah kurang bagus karena, hal itu hanya akan memperpanjang bentuk penulisan coding Anda. Jadi, gunakanlah JFormattedTextField. Selain gaji pegawai bisa juga untuk kasus harga barang. Hal ini sering Anda jumpai pada aplikasi sistem penjualan kasir. Bayangkan apabila si kasir yang sedang bertugas secara tidak sengaja melakukan penginputan yang tidak sesuai maka, program Anda akan error dimana – mana. Dan itu akan memerlukan waktu bagi Anda untuk maintenance kembali aplikasi yang Anda buat. Jadi, mulai sekarang untuk mendapatkan inputan user dari jenis Textfield sebaiknya Anda pertimbangkan kembali apakah menggunakan JTextField atau JFormattedTextField.

Berikut ialah contoh sederhananya.

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.text.NumberFormat;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.text.NumberFormatter;

/**
 * 
 * @author Yudi Setiawan
 * 
 * Belajar Set Currency di TextField Java
 *
 */

public class Main extends JFrame
{
	//	Komponen
	JFormattedTextField ftextfield;
	
	//	Objek untuk set currency.
	//	Mengambil format dari komputer. 
	//	Ini tergantung dari settingan mode date time komputer
	//	masing-masing. Bisa Anda setting di Control Panel jika Anda
	//	menggunakan Windows
	NumberFormat numformat = NumberFormat.getInstance();
	NumberFormatter numformatter;
	
	
	
	//	Konstruktor
	Main()
	{
		setTitle("Belajar Currency di TextField");
		setSize(300, 100);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		setLayout(null);
		
		//	Set Layout dari Komponen JLabel		
		JLabel lblFTextfield = new JLabel("FormattedTextField");
		add(lblFTextfield);
		lblFTextfield.setBounds(10, 20, 150, 20);
		
		//	panggil method setCurrencyNow
		setCurrencyNow();
		
		//	set currency format in TextField
		ftextfield = new JFormattedTextField(numformatter);
		
		//	Set Layout dari Komponen TextField
		add(ftextfield);
		ftextfield.setBounds(150, 20, 110, 20);	
		ftextfield.setValue(0);
		
		
	}
	
	//	Set Currency
	void setCurrencyNow()
	{
		//	set banyaknya angka akhir bilangan
		numformat.setMaximumFractionDigits(0);
		
		//	Deklarasikan NumberFormatter
		numformatter = new NumberFormatter(numformat);
		numformatter.setAllowsInvalid(false);
		
	}
		
	public static void main(String[] args)
	{
		new Main();
	}
}

Pada source code diatas, Anda memerlukan NumberFormat dan NumberFormatter. Pada program diatas, masih ada bug yakni, coba inputkan sebuah bilangan sampai tampak efeknya seperti pada gambar berikut dan hapus semuanya menggunakan tombol backspace dan yang terjadi adalah angka terakhir tidak mau terhapus atau tersisa.

 

Jadi, bagaimana solusinya? Tenang. Anda bisa menggunakan event KeyListener untuk mengatasinya. Tambahkan method berikut dan panggil ke dalam Konstruktor.

//[Tambahan]
//Set Event Handler Keyboard
void setTypingTextField()
{
	//	Key Listener
	ftextfield.addKeyListener(new KeyAdapter()
	{
		public void keyPressed(KeyEvent ke)
		{
			//	Jika terjadi penekanan tombol BACK_SPACE
			if(ke.getKeyCode() == KeyEvent.VK_BACK_SPACE)
			{
				String text = ftextfield.getText().toString();
				if(text.length() == 1)
				{
					ftextfield.setValue(0);
				}
			}
		}
	});
}

Gimana? Sudah bisa kan dihapus semua isinya. Maksud terhapus semuanya itu ialah minimal ada nol di JFormattedTextfield. Nol kan berarti nggak bernilai.

Berikut ialah source code lengkapnya.

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.text.NumberFormat;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.text.NumberFormatter;

/**
 * 
 * @author Yudi Setiawan
 * 
 * Belajar Set Currency di TextField Java
 *
 */

public class Main extends JFrame
{
	//	Komponen
	JFormattedTextField ftextfield;
	
	//	Objek untuk set currency.
	//	Mengambil format dari komputer. 
	//	Ini tergantung dari settingan mode date time komputer
	//	masing-masing. Bisa Anda setting di Control Panel jika Anda
	//	menggunakan Windows
	NumberFormat numformat = NumberFormat.getInstance();
	NumberFormatter numformatter;
	
	
	
	//	Konstruktor
	Main()
	{
		setTitle("Belajar Currency di TextField");
		setSize(300, 100);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		setLayout(null);
		
		//	Set Layout dari Komponen JLabel		
		JLabel lblFTextfield = new JLabel("FormattedTextField");
		add(lblFTextfield);
		lblFTextfield.setBounds(10, 20, 150, 20);
		
		//	panggil method setCurrencyNow
		setCurrencyNow();
		
		//	set currency format in TextField
		ftextfield = new JFormattedTextField(numformatter);
		
		//	Set Layout dari Komponen TextField
		add(ftextfield);
		ftextfield.setBounds(150, 20, 110, 20);	
		ftextfield.setValue(0);
		setTypingTextField();
		
	}
	
	//	Set Currency
	void setCurrencyNow()
	{
		//	set banyaknya angka akhir bilangan
		numformat.setMaximumFractionDigits(0);
		
		//	Deklarasikan NumberFormatter
		numformatter = new NumberFormatter(numformat);
		numformatter.setAllowsInvalid(false);
		
	}
	
	//	[Tambahan]
	//	Set Event Handler Keyboard
	void setTypingTextField()
	{
		//	Key Listener
		ftextfield.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent ke)
			{
				//	Jika terjadi penekanan tombol BACK_SPACE
				if(ke.getKeyCode() == KeyEvent.VK_BACK_SPACE)
				{
					String text = ftextfield.getText().toString();
					if(text.length() == 1)
					{
						ftextfield.setValue(0);
					}
				}
			}
		});
	}
	
	public static void main(String[] args)
	{
		new Main();
	}
}

About Author

Yudi Setiawan

Saat ini aktif sebagai Mahasiswa di salah satu Universitas di kota Medan dengan mengambil bidang Fakultas Teknik dan Ilmu Komputer. Sangat senang dengan bahasa pemrograman Java dan Android.


Comment & Discussions

    Please LOGIN before if you want to give the comment.