Zum Inhalt springen

JFormattedTextField


ExAzubi

Empfohlene Beiträge

Hallo zusammen,

bin kurz vor der Verzweiflung:( Ich möchte mir gerne ein Textfeld erstellen, in dem nur eine Eingabe von Zahlen erlaubt ist, und nicht mehr und weniger als 4 Stellen eingegeben werden können. Solange das nicht passiert ist soll er in dem TextFeld "Gefangen" bleiben. Mit JFormattedTextField kann man ja formatierte String eingeben lassen, und es sperrt selbständig, wenn die Eingabe nicht komplett ist. ABER WIE:confused:

Danke David

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

das ganze ist zwar nicht das eleganteste, aber probiers mal aus.

Wenn Du es benutzen willst, würde ich eine eigene Klasse von JTextField ableiten und dann die ganzen überprüfungen dort einfügen. Ich hab's jetzt nur so gemacht, damit hier nicht soviel steht. Aber als eigene Klasse nach Art: class myTF extends JTextField find ichs am besten. Falls Du noch Hilfe brauchst meil einfach. Auch möchte ich sagen, daß die Überprüfungsmethoden noch ne Ecke geschmeidiger gemacht werden können. Ich habe net so viel Zeit.


import java.awt.*;

import java.awt.event.*;


import javax.swing.*;



public class tw extends JFrame {


    private JTextField jtf;


    /** Creates a new instance of tw */

    public tw() {

        super("TextFieldDemo");

        initFrm();

        crtTextField();

        crtFrm();

    }


    private void crtTextField() {

        jtf = new JTextField();

        jtf.addKeyListener(new KeyListener() {


            public void keyTyped(KeyEvent ke) {


            }


            public void keyPressed(KeyEvent ke) {

                checker();

                if(ke.getKeyCode()== 10){

                    checker2();

                }

            }


            public void keyReleased(KeyEvent ke) {


            }


        });

        jtf.addFocusListener(new FocusAdapter() {

            public void focusLost(FocusEvent fe) {

                checker2();

            }


            public void focusGained(FocusEvent fe) {}

        });


    }


    private void checker() {

        try {

            Integer.parseInt(jtf.getText());

        } catch (NumberFormatException nfex ) {

            jtf.setText("");

        }

    }


    private void checker2() {

        if(jtf.getText().length() < 4) {

            jtf.setText("");

            Toolkit.getDefaultToolkit().beep();

            jtf.grabFocus();

        }

        try {

            if(Integer.parseInt(jtf.getText()) >9999) {

                jtf.setText("");

                Toolkit.getDefaultToolkit().beep();

                jtf.grabFocus();

            }

        } catch (NumberFormatException nfex ) {

            jtf.setText("");

        }

    }


    private void crtFrm() {

        getContentPane().add(jtf, BorderLayout.NORTH);

        getContentPane().add(new JButton("Ich mach nix"), BorderLayout.CENTER);

        getContentPane().add(new JButton("Ich auch nicht, nur zum Focuswechsel"), BorderLayout.SOUTH);

    }



    private void initFrm() {

        setSize(200,150);


        addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent we){

                extApp();

            }

        });

    }


    private void extApp() {

        System.exit(0);

    }



    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        new tw().show();

    }


}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi, habe schon andersweitig eine Antwort gefunden, trotzdem Danke. Sie kann zwar nicht das, was das JFormattedTextField kann, aber sie tut´s durchaus auch. Das mit den KeyListener habe ich auch schin probiert, hatte aber einen Nachteil, wenn man zu schnell getippt hat, haben die Prüfmethoden nicht mehr gegriffen.

import javax.swing.*;

import javax.swing.text.*;

import java.awt.*;

public class FixedNumericDocument extends PlainDocument {

private int maxLength = 9999;

private boolean numericOnly

public FixedNumericDocument(int maxLength, boolean numericOnly) {

super();

this.maxLength = maxLength;

this.numericOnly = numericOnly;

}

//this is where we'll control all input to our document.

//If the text that is being entered passes our criteria, then we'll just call

//super.insertString(...)

public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {

if (getLength() + str.length() > maxLength) {

Toolkit.getDefaultToolkit().beep();

return;

}

else {

try {

if (numericOnly) {

//check if str is numeric only

Integer.parseInt(str);

//if we get here then str contains only numbers

//so it's ok to insert

}

super.insertString(offset, str, attr);

}

catch(NumberFormatException exp) {

Toolkit.getDefaultToolkit().beep();

return;

}

}

return;

}

}

Sind sehr Elegantelösung. Habe mir eine Klasse von JTextField abgeleitet, und dann da noch ein bisschen rumprobiert.

Trotzdem Danke

David

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...