JTextField soll nur Integer als Eingabewert annehmen

Ich hab das bei einem JTextField mit einem DocumentFilter gemacht, der schon während der Texteingabe überprüft und dann nur Zahlen zulässt, oder auch andere Regeln festlegen kann wie z.B. die Zahl darf nicht mit null anfangen, oder eine maximale Anzahl an Ziffern.
 
Du könntest mit
Code:
zahl = Integer.valueOf(nurintTField.getText());
den Inhalt des Feldes in Integer umwandeln. Falls es kein Integer ist wird eine NumberFormatException geworfen, die du dann entsprechend nutzen kannst um festzustellen ob ein Integer eingegeben wurde.

Mit freundlichen Grüßen
 
Ich habe heute das selbe Problem (nur mit doubles, statt ints) folgendermasen gelöst:

Java:
jtextfield.setInputVerifier(new NumberInputVerifier());

class NumberInputVerifier extends InputVerifier {

    public NumberInputVerifier() {
        super();
    }

    @Override
    public boolean verify(JComponent input) {
        JTextField jtf = (JTextField) input;
        boolean ans = false;
        String toWorkWith = jtf.getText();
        toWorkWith = toWorkWith.replaceAll(",", "."); // Alle Kommas zu Punkten
        ans = checkIfNumber(toWorkWith);
        return ans;
    }

    @Override
    public boolean shouldYieldFocus(JComponent input) {
        if (!verify(input)) {
            input.setForeground(Color.RED);
            return false;
        } else {
            input.setForeground(Color.BLACK);
            return true;
        }
    }

    private boolean checkIfNumber(String toWorkWith) {
        String[] split = toWorkWith.split("\\.");
        System.out.println(split.length);
        if (split.length > 2) {
            return false;
        }
        boolean ans = true;

        for (int j = 0; j < toWorkWith.length(); j++) {
            char c = toWorkWith.charAt(j);
            switch (c) {
                case '0':
                    break;
                case '1':
                    break;
                case '2':
                    break;
                case '3':
                    break;
                case '4':
                    break;
                case '5':
                    break;
                case '6':
                    break;
                case '7':
                    break;
                case '8':
                    break;
                case '9':
                    break;
                case '.':
                    break;
                default:
                    ans = false;
                    break;
            }
        }
        return ans;
    }
}

Allerdings denke ich, dass man es bestimmt besser lösen kann 🙂
 
Vielleicht einen JSpinner mit NumberFormat und ausschließlich Ganzzahlen in Betracht ziehen:

Java:
            SpinnerNumberModel spinnerModel = new SpinnerNumberModel(0, 0, 65535, 1);
            JSpinner spinner = new JSpinner(spinnerModel);
            spinner.setEditor(new JSpinner.NumberEditor((JSpinner) valueComponent, "0"));
 

Neue Themen


Zurück
Oben