ExAzubi Geschrieben 25. Juni 2002 Teilen Geschrieben 25. Juni 2002 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LoCal Geschrieben 25. Juni 2002 Teilen Geschrieben 25. Juni 2002 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(); } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ExAzubi Geschrieben 25. Juni 2002 Autor Teilen Geschrieben 25. Juni 2002 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.