Belajar Set Currency Format di TextField Java Oleh: Yudi Setiawan
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...
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 import import import
javax.swing.JFormattedTextField; javax.swing.JFrame; javax.swing.JLabel; 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;
// Main() {
Konstruktor
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 import import import
javax.swing.JFormattedTextField; javax.swing.JFrame; javax.swing.JLabel; 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;
// Main() {
Konstruktor
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(); } }
Tentang Penulis 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.