Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีทำให้ JTextField รับเฉพาะตัวเลขใน Java

โดยค่าเริ่มต้น 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 เท่านั้น แสดงข้อความแจ้งเตือนสีแดงเมื่อพิมพ์อักขระอื่น