Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Mengehadkan JTextField untuk Menerima Integer Positif Sahaja?

Bagaimanakah Saya Boleh Mengehadkan JTextField untuk Menerima Integer Positif Sahaja?

Mary-Kate Olsen
Lepaskan: 2024-12-26 13:41:09
asal
610 orang telah melayarinya

How Can I Restrict a JTextField to Accept Only Positive Integers?

Menghadkan Input JTextField kepada Integer

Tugas mengehadkan input JTextField kepada hanya menerima integer positif adalah keperluan yang sering dihadapi, namun sekatan melaksanakan sekatan ini boleh menimbulkan cabaran. Menggunakan KeyListener untuk tujuan ini, seperti yang dicuba pada mulanya, mempunyai beberapa kelemahan.

Kelemahan Menggunakan KeyListener:

  • Ketidakupayaan untuk menangkap semua input : KeyListener hanya mengesan ketukan kekunci, tetapi ia tidak akan mengendalikan data yang dimasukkan melalui salin dan tampal, yang boleh memintas sekatan.
  • Kawalan peringkat rendah: KeyListeners beroperasi pada tahap abstraksi yang rendah, menjadikannya kurang sesuai untuk aplikasi Swing.

The Penyelesaian: DocumentFilter

Pendekatan yang lebih baik ialah menggunakan Penapis Dokumen. Komponen Swing ini membolehkan anda menapis kandungan komponen teks, memberikan kawalan yang tepat ke atas perkara yang boleh dimasukkan.

Cara ia Berfungsi:

Penapis Dokumen membolehkan anda untuk periksa sebarang perubahan masuk pada kandungan komponen teks. Dengan menyemak sama ada rentetan yang diubah suai mewakili integer yang sah, anda boleh sama ada menerima atau menolak perubahan.

Contoh Pelaksanaan:

Coretan kod berikut menunjukkan cara melaksanakan DocumentFilter yang mengehadkan input kepada integer:

import javax.swing.text.DocumentFilter;
import javax.swing.text.BadLocationException;

public class MyIntFilter extends DocumentFilter {
    @Override
    public void insertString(FilterBypass fb, int offset, String string,
                            AttributeSet attr) throws BadLocationException {
        Document doc = fb.getDocument();
        StringBuilder sb = new StringBuilder();
        sb.append(doc.getText(0, doc.getLength()));
        sb.insert(offset, string);

        if (test(sb.toString())) {
            super.insertString(fb, offset, string, attr);
        } else {
            // Handle invalid input, e.g., display an error message
        }
    }

    private boolean test(String text) {
        try {
            Integer.parseInt(text);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
}
Salin selepas log masuk

Dengan melampirkan ini DocumentFilter ke JTextField anda, anda boleh memastikan bahawa hanya integer yang sah dibenarkan sebagai input.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengehadkan JTextField untuk Menerima Integer Positif Sahaja?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan