# JTextField soll nur Integer als Eingabewert annehmen



## davidh38 (4. Sep 2011)

JTextField soll nur Integer als Eingabewert annehmen
Gibt es dafür ein Funktion dafür?


----------



## Camino (4. Sep 2011)

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.


----------



## roodrallec (5. Sep 2011)

Du könntest mit 
	
	
	
	





```
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


----------



## L-ectron-X (5. Sep 2011)

Die FAQ könnte helfen: http://www.java-forum.org/bilder-gui-damit-zusammenhaengt/7213-jtextfield-dokumentarten.html


----------



## Latur (6. Sep 2011)

Ich habe heute das selbe Problem (nur mit doubles, statt ints) folgendermasen gelöst:


```
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


----------



## Gast2 (6. Sep 2011)

Vielleicht einen JSpinner mit NumberFormat und ausschließlich Ganzzahlen in Betracht ziehen: 


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


----------

