Schlagwörter

, , ,

Um mit der Programmiersprache Java Eingaben verarbeiten zu können, ist häufig mehr Aufwand notwendig als bei anderen Programmiersprachen. Besonders gerne entstehen Fehler, wenn ein Benutzer eine Zahl eingeben soll, aber neben den Ziffern auch Buchstaben eintippt.

Der folgende Quellcode kann anstelle des JTextField hierfür verwendet werden, um korrekt Zahlen (aus dem Zahlenraum des Integers oder Double) einzulesen:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JTextField;

/**
 * Diese Klasse schränkt die Klasse {@link JTextField} so ein,
 * dass man nur Zahlen eingeben kann.
 * Ein Konstruktor nimmt dabei einen boolean-Wert entgegen, der festlegt,
 * ob die Zahlen auch Nachkommastellen haben dürfen
 * (Dezimalpunkt wird verwendet).
 *  
 * @author  Thomas Nawrath (März 2013)
 *
 */
public class MyNumberField extends JTextField implements KeyListener {
	
	private boolean dezimalzahlenErlaubt;
	
	public MyNumberField(boolean dezimalzahlenErlaubt){
		super();
		this.dezimalzahlenErlaubt = dezimalzahlenErlaubt;
		super.addKeyListener(this);
	}
	
	public MyNumberField(){
		this(true);
	}
	
	private boolean testeVorzeichen(char taste){
		// genau einmal das Vorzeichen, und zwar am Anfang
		if (taste == '-' && super.getText().trim().charAt(0) != '-') 
				super.setText("-"+super.getText());
		return false;
	}
	
	private boolean testeDezimalpunkt(char taste){
		// genau einmal der Dezimalpunkt
		if (taste != '.')
			return false;
		else
			return dezimalzahlenErlaubt && super.getText().indexOf('.')< 0;
	}
	
	private boolean testeZiffer(char taste){
		// ansonsten nur Ziffern
		if (taste >= '0' && taste <= '9' )
			return true;
		else
			return false;
	}

	@Override
	public void keyTyped(KeyEvent arg0) {
		char gedrückteTaste = arg0.getKeyChar();
		if (!testeVorzeichen(gedrückteTaste) &&
                    !testeDezimalpunkt(gedrückteTaste) &&
                    !testeZiffer(gedrückteTaste))
			arg0.consume();
	}

	@Override
	public void keyPressed(KeyEvent arg0) {}

	@Override
	public void keyReleased(KeyEvent arg0) {}

}
Advertisements