Di Java, Ada 2 jenis TextField(TextBox di VB NET) yakni, JTextField danJFormattedTextField. Kedua Textfield ini jelaslah berbeda fungsinya. UntukJTextField 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 userbisa 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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
| 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 danNumberFormatter. 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 KeyListeneruntuk mengatasinya. Tambahkan method berikut dan panggil ke dalam Konstruktor.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| //[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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
| 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(); } } |
Tidak ada komentar:
Posting Komentar