JTextField funktioniert nicht

F

FranzFerdinand

Gast
Hallöle,

ich habe eine ganz steinzeitliche Javadatei in meinem Archiv gefunden und stolpere über folgendes:
Im Code kommen "JNumberFields" häufig vor. Aber er zeigt mir immer an, dass es die nicht gebe. Und auch beim importieren, will Eclipse mir das nicht anzeigen. Da ist alles vorhanden. JLabel, JTextField, JTextArea, usw.
Aber JNumberField nimmt er nicht.

Numberfield ist in dem Fall ein JTextField, was nur Zahlen annimmt.
Java:
private JNumberField zahleneingabe = new JNumberField();
Habe ich früher auf Windows mit dem Javaeditor immer benutzt und funktionierte immer.

Nun ein paar Jährchen später sitz ich hier vor Eclipse und das gibts nicht.

Kann mich einer darüber aufklären?

Wurde das irgendwie schon abgeschafft? Oder gibt es eine adäquat bessere Methode, um das zu managen?

Ich habe Java 8 Update 25.

Vielen Dank

Gruß
Lukas
 

Khal Drogo

Bekanntes Mitglied
Guten Abend,

bist du denn sicher, dass du dir nicht einfach selber eine Klasse JNumberField geschrieben hast? :D

Mit freundlichen Grüßen
Xelsarion
 
F

FranzFerdinand

Gast
Guten Abend,

bist du denn sicher, dass du dir nicht einfach selber eine Klasse JNumberField geschrieben hast? :D

Mit freundlichen Grüßen
Xelsarion

Hallöle,

ne, wahrlich nicht, sonst würde die ja in dem Ordner mit drin sein. :)
das war damals das Programm "JavaEditor" (gibts nur für Windows) und da war in dem Menü mit den ganzen Swingelementen sogar Explizit ein Element JNumberField, neben dem JTextField.
Deshalb verwundert es mich jetzt so stark, dass das auf einmal weg sein solle...
 

Khal Drogo

Bekanntes Mitglied
Wenn ich mir das hier so durchlese, hört es sich so an, als würde der JavaEditor das bereitstellen. Von Hause aus gibt es das aber nicht.
Heißt also entweder zurück zu JavaEditor, oder vielleicht (und das ist m.M.n. die bessere Idee) ne eigene Klasse schreiben, die von JTextField erbt und die nötigen Methoden bereitstellt.

Mit freundlichen Grüßen
Xelsarion
 
F

FranzFerdinand

Gast
Wenn ich mir das hier so durchlese, hört es sich so an, als würde der JavaEditor das bereitstellen. Von Hause aus gibt es das aber nicht.
Heißt also entweder zurück zu JavaEditor, oder vielleicht (und das ist m.M.n. die bessere Idee) ne eigene Klasse schreiben, die von JTextField erbt und die nötigen Methoden bereitstellt.

Mit freundlichen Grüßen
Xelsarion

Scheint mir so, ja, vielen Dank. :)
Javaeditor hab ich damals in der Schule benutzt. Schlechtester Editor den man haben kann, da kann man besser gleich im Windows Texteditor arbeiten.
Ich werde die Tage mal gucken, ob ich an einen Windows rankomme, wo er installiert ist, dann kann ich mir die Klassendatei dazu kopieren.

Habe nun einen Mac, da geht das nicht zu installieren. ;)

Gruß
Lukas
 
F

FranzFerdinand

Gast
Ich hab die Klasse gefunden. Habe sie mir schon mal irgendwo auf meinen Rechner kopiert, man o man.

Sie sieht folgendermaßen aus:
Java:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import java.util.*;

/**
Swing-component for input and output of numeric values.
*/

public class JNumberField extends JTextField {

  /** constructor for a JNumberField */
  public JNumberField() {
    enableEvents(AWTEvent.KEY_EVENT_MASK);
  }

  /** Gets a double-value from the JNumberField. */
  public double getDouble() {
    Double d = new Double(getText());
    return d.doubleValue();
  }

  /** Gets a float-value from the JNumberField. */
  public float getFloat() {
    Double d = new Double(getText());
    return d.floatValue();
  }

  /** Gets an int-value from the JNumberField. */
  public int getInt() {
    Double d = new Double(getText());
    return d.intValue();
  }

  /** Gets a long-value from the JNumberField. */
  public long getLong() {
    Double d = new Double(getText());
    return d.longValue();
  }

  /** Checks wether the JNumberField contains a valid numeric value. */
  public boolean isNumeric() {
    final String Digits     = "(\\p{Digit}+)";
    final String HexDigits  = "(\\p{XDigit}+)";
    // an exponent is 'e' or 'E' followed by an optionally
    // signed decimal integer.
    final String Exp        = "[eE][+-]?"+Digits;
    final String fpRegex    =
      ("[\\x00-\\x20]*"+  // Optional leading "whitespace"
       "[+-]?(" + // Optional sign character
       "NaN|" +           // "NaN" string
       "Infinity|" +      // "Infinity" string

       // A decimal floating-point string representing a finite positive
       // number without a leading sign has at most five basic pieces:
       // Digits . Digits ExponentPart FloatTypeSuffix
       //
       // Since this method allows integer-only strings as input
       // in addition to strings of floating-point literals, the
       // two sub-patterns below are simplifications of the grammar
       // productions from the Java Language Specification, 2nd
       // edition, section 3.10.2.

       // Digits ._opt Digits_opt ExponentPart_opt FloatTypeSuffix_opt
       "((("+Digits+"(\\.)?("+Digits+"?)("+Exp+")?)|"+

       // . Digits ExponentPart_opt FloatTypeSuffix_opt
       "(\\.("+Digits+")("+Exp+")?)|"+

       // Hexadecimal strings
       "((" +
        // 0[xX] HexDigits ._opt BinaryExponent FloatTypeSuffix_opt
        "(0[xX]" + HexDigits + "(\\.)?)|" +

        // 0[xX] HexDigits_opt . HexDigits BinaryExponent FloatTypeSuffix_opt
        "(0[xX]" + HexDigits + "?(\\.)" + HexDigits + ")" +

        ")[pP][+-]?" + Digits + "))" +
             "[fFdD]?))" +
             "[\\x00-\\x20]*");// Optional trailing "whitespace"

    return java.util.regex.Pattern.matches(fpRegex, getText());
  }

  /** Sets a double-value into the JNumberField. */
  public void setDouble(double d) {
    setText(String.valueOf(d));
  }

  /** Sets a double-value with N digits into the JNumberField. */
  public void setDouble(double d, int N) {
    setText(String.format(Locale.ENGLISH, "%." + N + "f", d));
  }

  /** Sets a float-value into the JNumberField. */
  public void setFloat(float f) {
    setText(String.valueOf(f));
  }

  /** Sets a float-value with N digits into the JNumberField. */
  public void setFloat(float f, int N) {
    setText(String.format(Locale.ENGLISH, "%." + N + "f", f));
  }

  /** Sets an int-value into the JNumberField. */
  public void setInt(int i) {
    setText(String.valueOf(i));
  }

  /** Sets a long-value into the JNumberField. */
  public void setLong(long l) {
    setText(String.valueOf(l));
  }
  
  /** Clears the JNumberField */
  public void clear() {
    setText("");
  }

  protected void processKeyEvent(KeyEvent e) {
    super.processKeyEvent(e);
    if (isNumeric() || getText().equals("-") || getText().equals("") || getText().equals(".")) {
    	setBackground(Color.white);
    } else {
    	setBackground(Color.red);
    }
  }
  
}

Also wird ein Roter Hintergrund erzeugt, wenn etwas ungültiges drin vorkommt.
Würde ich gerne noch ein wenig abwandeln, sodass er das Zeichen, was eingegeben wird gar nicht erst akzeptiert und einen Beep-Ton angibt.
Weil Rot markieren ist schön und gut, aber wenn der nicht verhindert, dass da was anderes reinkommt, bekomme ich unnötige Exceptions.

Das Beep krieg ich so hin: Toolkit.getDefaultToolkit().beep();

Ich muss mal gucken, wie ich den Rest entsprechend verändere.

Gruß
Lukas
 
F

FranzFerdinand

Gast
Ich hab mich jetzt mit JFormattedTextFields beschäftigt, um das mit den Zahlen einzuschränken.
Hier beispielsweise ein Spiel zum Zahlenraten von 1 bis 100:
Java:
package zahlenraten;

import java.text.NumberFormat;
import java.util.Random;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.text.NumberFormatter;

public class Zahlenraten {
	
	private NumberFormat format = NumberFormat.getInstance(); 
	private NumberFormatter formatter = new NumberFormatter(format);
	private int zufallszahl;
	private int ratezahl;
	private int versuche = 0;
	
	private void zahleneingabe() {
		JFormattedTextField nummernfeld = new JFormattedTextField(formatter);
		Object[] zahlenfrage = {"Bitte gib eine Zahl zwischen 0 und 100 ein.", nummernfeld};
		JOptionPane pane = new JOptionPane(zahlenfrage, JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION);
		pane.createDialog(null, "Errate die Zahl!").setVisible(true);
		String zahlStr = nummernfeld.getText();
		if(zahlStr.equals("")) {
			JOptionPane.showMessageDialog(null, "Bitte gib eine Zahl ein!", "Ungültige Eingabe", JOptionPane.ERROR_MESSAGE);
			zahleneingabe();
		} else if(zahlStr.equals("1804")) {
			JOptionPane.showMessageDialog(null, "Die korrekte Zahl ist "+zufallszahl+". \nVerrate es nicht weiter.", "Napoléonmodus", JOptionPane.ERROR_MESSAGE);
			zahleneingabe();
		} else {
			ratezahl = Integer.parseInt(zahlStr);
			versuche += 1;
			rechnen();
		}
	}
	
	public Zahlenraten() {
		format.setGroupingUsed(false); 
		formatter.setAllowsInvalid(false);
		Random hundert = new Random();
		zufallszahl = hundert.nextInt(100)+1;
		zahleneingabe();
	}
	
	public void rechnen() {
		if(versuche > 10) {
			JOptionPane.showMessageDialog(null, "Du hast mehr als 10 Versuche gebraucht. \nDu hast verloren.", "Verloren", JOptionPane.PLAIN_MESSAGE);
			neuepartie();
		} else {
			if(ratezahl>zufallszahl) {
				JOptionPane.showMessageDialog(null, "Deine Zahl "+ratezahl+" ist zu groß!", "Zu groß", JOptionPane.PLAIN_MESSAGE);
				zahleneingabe();
			} else if (ratezahl<zufallszahl) {
				JOptionPane.showMessageDialog(null, "Deine Zahl "+ratezahl+" ist zu klein!", "Zu klein", JOptionPane.PLAIN_MESSAGE);
				zahleneingabe();
			} else {
				if(versuche == 1) {
					JOptionPane.showMessageDialog(null, "Deine Zahl "+ratezahl+" ist die gesuchte Zahl! \nDu gewinnst nach einem Versuch!", "Gewonnen!", JOptionPane.PLAIN_MESSAGE);
				} else {
					JOptionPane.showMessageDialog(null, "Deine Zahl "+ratezahl+" ist die gesuchte Zahl! \nDu gewinnst nach "+versuche+" Versuchen!", "Gewonnen!", JOptionPane.PLAIN_MESSAGE);
				}
				neuepartie();
			}
		}
	}
	
	public void neuepartie() {
		int dialogneustart = JOptionPane.showConfirmDialog(null, "Möchtest Du eine neue Zahl erraten?", "Neue Runde?", JOptionPane.YES_NO_OPTION);
        if(dialogneustart == 0) {
     	   new Zahlenraten();
        } else {
     	   System.exit(0);
        }
	}
	
	public static void main(String[] args) {
		new Zahlenraten();
	}
}

Funktioniert gut, er nimmt von vornherein nur Zahlen an.
Aber ein Fehler ist da noch, den ich irgendwie nicht ganz erklären kann.

Wenn ich etwas eingebe und dann die Zeichen mit Backspace löschen möchte, dann geht das nur bis zum 2. Zeichen vor. Das erste Zeichen bleibt, wenn man es einmal eingetippt hat. Lässt sich nicht löschen.

Kann das einer nachvollziehen und lösen?

Gruß
Lukas :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G KeyListener für JTextField Allgemeine Java-Themen 5
J Circumflex in JTextField Allgemeine Java-Themen 1
G JTextField Inhalt in einem Long einfügen Allgemeine Java-Themen 2
J JTextField nicht editierbar Allgemeine Java-Themen 5
G Aus JTextField Zahlen auslesen und random generieren Allgemeine Java-Themen 10
B JTextfield Allgemeine Java-Themen 9
E Eingabeprüfung JTextField. Fehler bei Copy-Paste Allgemeine Java-Themen 4
L JTextfield wird nicht ausgelesen Allgemeine Java-Themen 7
T JTextField in Listener leeren Allgemeine Java-Themen 2
M jTextField --> Zwischenspeicher Allgemeine Java-Themen 20
M Datum einlesen aus jTextField Allgemeine Java-Themen 2
G JTextField mit Zeichenbeschränkung Allgemeine Java-Themen 7
E JTextField auf JWindow Allgemeine Java-Themen 2
P Suche Benis IP/Netzwerkadresse JTExtField Allgemeine Java-Themen 2
S JTable editieren + in JTextField schreiben Allgemeine Java-Themen 7
O Inhalt vom JTextfield im DebugMode ermitteln? Allgemeine Java-Themen 2
M Autovervollständigung im JTextField Allgemeine Java-Themen 3
P JTextField textfarbe schwarz auch wenn JTF deaktiviert ist Allgemeine Java-Themen 4
M Text in JTextfield einfügen sofort dann wird Text gekürzt Allgemeine Java-Themen 2
MQue JTextField Kommastellen Allgemeine Java-Themen 5
G Problem mit jTextField Allgemeine Java-Themen 7
D JTextfield für double werte Allgemeine Java-Themen 2
F JTextField Eingabe automatisch bestaetigen Allgemeine Java-Themen 17
D Probleme beim FAQ (JTextField: Dokumentarten) Allgemeine Java-Themen 5
H Position von JTextField Allgemeine Java-Themen 2
O String übergeben ist name eines JTextField wie zugreifen Allgemeine Java-Themen 9
Z JTextField mit Model kommunizieren Allgemeine Java-Themen 6
G Fragen zu JTextField bzw. JTextArea Allgemeine Java-Themen 2
G JTextField: Feld für Ausgabe von Meldungen Allgemeine Java-Themen 14
G Frage zu JTextField Allgemeine Java-Themen 2
E Field-Objekt in JTextField parsen Allgemeine Java-Themen 3
F KeyListener für JTextField Allgemeine Java-Themen 4
G Nur Integer Werte in JTextField Allgemeine Java-Themen 4
H JTextField Allgemeine Java-Themen 2
C JTextField Allgemeine Java-Themen 9
B TextListener bei JTextField Allgemeine Java-Themen 6
D WSDL-Aufruf funktioniert nicht mehr nach Umstieg auf Maven Allgemeine Java-Themen 4
Zrebna Berechnung der Zeit funktioniert nicht wie erwartet: Date, GregorianCalendar Allgemeine Java-Themen 16
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
stormyark TikTakToe funktioniert nicht Allgemeine Java-Themen 10
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
N Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 6
Lukas2904 Wie funktioniert ein KeyLogger? Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
Killunox MaxHeap Zuweisung unter Linux funktioniert nicht Allgemeine Java-Themen 1
I Wieso funktioniert das nich? Allgemeine Java-Themen 5
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
A Mp3 Player funktioniert nicht Allgemeine Java-Themen 0
X JNA funktioniert nicht mehr Allgemeine Java-Themen 4
bueseb84 FolderWatcher mit WatchService funktioniert nur bedingt Allgemeine Java-Themen 5
Drachenbauer Division mit Int funktioniert nicht Allgemeine Java-Themen 3
O docx-Datei erzeugung mit DocXStamper funktioniert nicht Allgemeine Java-Themen 2
F Schleife funktioniert nicht richtig Allgemeine Java-Themen 13
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Tesseract-OCR 4.0 unter Linux funktioniert nicht Allgemeine Java-Themen 3
J Wie konkret funktioniert das Modulsystem unter Java 11? Allgemeine Java-Themen 4
J Neuronales Netz funktioniert mal und mal nicht. Allgemeine Java-Themen 3
T Umlaute in Eclipse einlesen funktioniert nicht Allgemeine Java-Themen 16
A Methodenaufruf funktioniert nicht richtig Allgemeine Java-Themen 5
C WindowBuilder Design funktioniert nicht Allgemeine Java-Themen 0
J FTPSClient funktioniert nicht Allgemeine Java-Themen 4
H IDEA IntelliJ Java Mail funktioniert nach Export nicht mehr! Allgemeine Java-Themen 1
M Operatoren Warum funktioniert diese überprüfung nicht? Allgemeine Java-Themen 7
R jar-Datei funktioniert nicht Allgemeine Java-Themen 2
E Open Declaration Funktioniert nicht Allgemeine Java-Themen 0
R Verschlüsselung funktioniert nicht Allgemeine Java-Themen 5
RalleYTN requires transitive funktioniert nicht? Allgemeine Java-Themen 7
R Bruteforce hashes mit multithreading. Funktioniert das so? Allgemeine Java-Themen 0
P Best Practice Wieso funktioniert der Modulo - Operator nicht? Allgemeine Java-Themen 2
HarleyDavidson Eigener PropertyChangeListener funktioniert einfach nicht Allgemeine Java-Themen 3
J Exclude funktioniert nicht Allgemeine Java-Themen 2
K .jar funktioniert nicht vollständig Allgemeine Java-Themen 1
P Java https proxy (-Dhttps.proxyHost) Start-Parameter funktioniert nicht? Allgemeine Java-Themen 2
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
O Fahrenheit/Celsius Converter funktioniert nicht Allgemeine Java-Themen 2
M Serialisierung funktioniert nicht Allgemeine Java-Themen 9
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
J Arrays auf gleichheit untersuchen funktioniert nicht Allgemeine Java-Themen 11
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H Timer funktioniert nicht? Allgemeine Java-Themen 3
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
O Mein JButton Array funktioniert nicht Allgemeine Java-Themen 3
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
J If Abfrage funktioniert nicht Allgemeine Java-Themen 4
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
U PersistenceManager.createEntityManager funktioniert nicht Allgemeine Java-Themen 3
D Java Datei nach Eclipse Export funktioniert nicht Allgemeine Java-Themen 0
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
H File.listFiles() funktioniert nicht... Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben