โดยค่าเริ่มต้น JTextField อนุญาตให้ป้อน ตัวเลข, ตัวอักษร, และ อักขระพิเศษ ได้ การตรวจสอบข้อมูลที่ผู้ใช้พิมพ์ใน JTextField อาจยุ่งยาก โดยเฉพาะถ้าต้องแปลงเป็นค่าตัวเลขเช่น int
ตัวอย่างด้านล่างแสดงวิธีจำกัด JTextField ให้รับ เฉพาะค่าตัวเลข เท่านั้น
ตัวอย่างโค้ด
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JTextFieldValidation extends JFrame {
JTextField tf;
Container container;
JLabel label;
public JTextFieldValidation() {
container = getContentPane();
setBounds(0, 0, 500, 300);
tf = new JTextField(25);
setLayout(new FlowLayout());
container.add(new JLabel("Enter the number"));
container.add(tf);
container.add(label = new JLabel());
label.setForeground(Color.red);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent ke) {
String value = tf.getText();
int l = value.length();
if (ke.getKeyChar() >= '0' && ke.getKeyChar() <= '9') {
tf.setEditable(true);
label.setText("");
} else {
tf.setEditable(false);
label.setText("* Enter only numeric digits (0-9)");
}
}
});
setVisible(true);
}
public static void main(String[] args) {
new JTextFieldValidation();
}
}
คำอธิบาย
- ใช้ KeyListener ตรวจสอบแต่ละปุ่มที่กด
- ถ้าเป็นตัวเลข 0-9: อนุญาตแก้ไขและล้างข้อความผิดพลาด
- ถ้าไม่ใช่: ปิดการแก้ไขและแสดงข้อความเตือน
ข้อควรระวัง
วิธีนี้ยังมีข้อจำกัด เช่น ไม่ป้องกันการวาง (paste) ข้อความที่ไม่ใช่ตัวเลข สำหรับการใช้งานจริงแนะนำให้ใช้ DocumentFilter หรือ JFormattedTextField แทน
ผลลัพธ์
ช่องป้อนข้อความจะรับเฉพาะตัวเลข 0-9 เท่านั้น แสดงข้อความแจ้งเตือนสีแดงเมื่อพิมพ์อักขระอื่น