Swing


Wie kann ich ein Textfeld erstellen, indem nur Zahlen eingegeben werden können?

package de.bastie.howto.swing.text;

import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
import javax.swing.text.AttributeSet;
import java.math.BigDecimal;

//Für den Test
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


/**
 * Title:        Make Java - How To
 * Description:  Ein Document für die Eingabe unformatierter Zahlen
 * Copyright:    Copyright © 2002 - free for all use
 * @author Bastie - Sebastian Ritter
 * @version 1.0.0.0
 * @pattern Model der M-VC Konzepts von Java
 */

public class NumberDocument extends PlainDocument{

  /** Wird benötigt, um den Test durchzuführen */

  private BigDecimal testInstance;

  /** Diese Methode muss überschrieben werden, um das gewünschte Verhalten
   *  zu erreichen. Sie kommt vom Javatyp AbstractDocument
   *  @param int Offset an dem der Text eingefügt werden soll.
   *  @param String Text der eingefügt werden soll
   *  @param AttributeSet Formatierungen des Textes
   *  @exception BadLocationException sofern der Text an einer Stelle eingefügt
   *             werden soll, die nicht vorhanden ist.
   *  @pattern StaticPolymorph as MethodDelegate
   */
  public void insertString (final int offset,
                            final String text,
                            final AttributeSet attributeSet)
          throws BadLocationException {
    //Prüfen, ob der einzufügende Text unseren Anforderungen entspricht

    if (this.isNumber(text)){
      /* Aufruf der Methode der Superklasse, da der Text nur aus Ziffern
         besteht.
       */
      super.insertString (offset, text, attributeSet);
    }
  }

  /** Prüft, ob es sich um eine Zahl handelt.
   * @return boolean true, wenn es sich um eine eine reine Ziffer handelt
   */
  protected boolean isNumber (final String toTest) {
    /* Zum Test wird versucht ein BigDecimal Objekt zu erzeugen, welches zu
       einer Exception führt, falls dies nicht möglich ist. Dies ist
       unkomplizierter als einen eigenen Test zu implementieren.
     */
    try {
      if (toTest.length() > 0)
        this.testInstance = new BigDecimal (toTest);
      //Objekterzeigung erfolgreich also eine Zahl
      return true;
    }
    catch (final NumberFormatException ignored){
      //Fehler also keine Zahl
    }
    return false;
  }

  /** Testmethode */
  public static void main (final String [] ignored){
    JFrame jFrameTest = new JFrame ("Test");
    jFrameTest.addWindowListener (new WindowAdapter (){
          public void windowClosing (final WindowEvent exitApplication){
            System.exit (0);
          }
    });
    jFrameTest.getContentPane().setLayout (new BorderLayout (0,0));
    jFrameTest.getContentPane().add (
            new JTextField (new NumberDocument (), "", 0), BorderLayout.NORTH);
    jFrameTest.pack ();
    jFrameTest.setVisible (true);
  }
}
all rights reserved © Bastie - Sebastian Ritter @: w³: http://www.Bastie.de
Diese Seite ist Bestandteil der Internetpräsenz unter http://www.Bastie.de


Java Cobol Software Resourcen Service Links Über mich Zum Gästebuch Forum