Java - Textfeld (String zu Double) überprüfen ob es Leer ist.

Kasino

Neuling
Thread Starter
Mitglied seit
05.04.2011
Beiträge
120
Ort
Lohmar
Hallo Lieben Programmier oder die, die es werden wollen und mehr davon wissen als ich ;)

Ich stehe vor einem Problem ich habe zwei Textfelder deren Inhalt von String zu Double gemacht wird. Jedoch wenn ich nur in ein Textfeld was eingebe kommt eine Fehlermeldung.

Mein code der überprüfung sieht so aus:
Code:
public void rechnung() {
		double eingabe1 = Double.parseDouble(celsius.getText());
		if (eingabe1.length() != 0 ){
			
		}
		double eingabe2 = Double.parseDouble(fahrenheit.getText());
		
		

		
		 	}
Ich weiß sieht schlimm aus und nur ist nur halb aber nur weil ich schon stunde dran sitze und vieles probiert habe sowie in Google gesucht habe es aber nicht geht.

Mein Ganzes Programm sieht so aus und hat die aufgabe bei Eingabe in ein Textfeld etwas zu rechnen und es andere auszugeben sowie umgekehrt.

Code:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class Fenster extends Frame implements WindowListener, ActionListener,
		KeyListener {
	double x, y;
	TextField celsius = new TextField();
	TextField fahrenheit = new TextField();

	Fenster() {
		this.setTitle("Umrechner");
		this.setBounds(100, 100, 500, 250);
		this.setLayout(null);
		this.setVisible(true);
		this.addWindowListener(this);
		this.setBackground(new Color(110, 200, 206));

		celsius.setBounds(37, 100, 90, 20);
		celsius.addKeyListener(this);
		this.add(celsius);

		fahrenheit.setBounds(37, 150, 90, 20);
		fahrenheit.addKeyListener(this);
		this.add(fahrenheit);

		Button b1 = new Button("Umrechnen");
		b1.setBackground(new Color(110, 200, 206));
		b1.setFont(new Font("helvetica", Font.BOLD, 14));
		b1.setBounds(330, 120, 100, 30);
		b1.addActionListener(this);
		this.add(b1);
	}

	public void paint(Graphics g) {
		g.setFont(new Font("helvetica", Font.BOLD, 18));
		g.drawString("Umrechner von Celsius (°C) und Fahrenheid (°F)", 37, 60);
		g.drawString("°C (Celsius)", 130, 115);
		g.drawString("°F (Fahrenheit)", 130, 165);

	}

	public void rechnung() {
		double eingabe1 = Double.parseDouble(celsius.getText());
		if (eingabe1.length() != 0 ){
			
		}
		double eingabe2 = Double.parseDouble(fahrenheit.getText());
		
		

		
		 	}

	public void keyPressed(KeyEvent e) {

		if (e.getKeyCode() == KeyEvent.VK_ENTER) {
			rechnung();
		}

	}

	@Override
	public void windowActivated(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowClosed(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowClosing(WindowEvent arg0) {
		System.exit(0);
	}

	@Override
	public void windowDeactivated(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowDeiconified(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowIconified(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowOpened(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		rechnung();

	}

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub

	}
}


Schon mal vielen vielen dank für euere Hilfe.

MFG Kasino
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Wenn Du schon sagst das eine Fehlermeldung kommt, warum gibst Du die Fehlermeldung dann nicht an?
 
Moin,

Die Fehlermeldung ist:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
	at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
	at java.lang.Double.parseDouble(Unknown Source)
	at Fenster.rechnung(Fenster.java:52)
	at Fenster.actionPerformed(Fenster.java:110)
	at java.awt.Button.processActionEvent(Unknown Source)
	at java.awt.Button.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Ich weiß was sie beideutet. Es müssen beide Textfelder gefüllt sein. Bzw eins muss mindestens gefüllt sein und bei dem anderen die Exception abgefangen werden. Jedoch brauche ich eine überprüfung um zu prüfen welches Textfeld von beiden gefüllt ist. UND DA IST DER KNACKPUNKT :P Diese überprüfung bei einem String Null Problem aber bei einem Double Wert weiß ich nicht weiter.

Gruß Kasino
 
Zuletzt bearbeitet:
Was du brauchst sind Try-Catch Blöcke.

Weiß gerade nicht, ob ich das Problem richtig verstanden habe, aber:

Code:
try
{
    double eingabe1 = Double.parseDouble(celsius.getText()); //Versuchen, Eingabe einzulesen

}
catch (NumberFormatException e) 
{
    System.out.println(e); //Hier kommt die Fehlerbehandlung
}

Ansonsten funktioniert *.length() nicht auf double. Könntest erst das ganze mit String überprüfen und erst dann in Double umwandeln, aber bitte auch in Try-Catch Blöcken, sonst haut es dir wieder paar Fehlermeldungen raus.
 
Zuletzt bearbeitet:
Okay deine zweite überlegung hatte ich auch schon überlegt jedoch bissen umstädnlich und dachte mir das es evt. ein leichtere Lösung gibt. Oder gibt es Felder wo man sowie so nur Int werte eintragen kann?
 
Mach das ganze mit Try-Catch Blöcken und fertig.. Ist das einfachste.
 
Gut aber trotzdem muss ich ja eine überprüfung haben mit welchen wert er rechnen soll. bzw muss ich ihm sagen welches textfeld gefüllt ist und mit dme gerechnet werden soll und da muss ich ja trotzdem eine überprüfung haben welches gefüllt ist. Da muss es doch aus sowas in der art geben wie *.length() oder nicht ? Ansonst müsste es sehr umständlich geschrieben werden und erst der string überprüft werden und nach der überprüfung erst in double umgewandelt werden.
 
ja wie Ungleich 0 ?Das schwachsinn wenn ich von Grad Celsius in Fahrenheid sowie umgekehrt rechne weil die 0 ja gebraucht wird.
 
Ich habe eine Lösung gefunden und poste sie mal für die, die es interressiert.

Quellcode ist vom ganzen Programm(Ein Programm das Celsius in Fahrenheid sowie umgekehrt ausrechnet.). Der Teil für den die Frage war, ist ROT gekenzeichnet.
Code:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener; 

import javax.swing.JOptionPane;

public class Fenster extends Frame implements WindowListener, ActionListener,
		KeyListener {
	double x, y;
	TextField celsius = new TextField();
	TextField fahrenheit = new TextField();

	Fenster() {
		this.setTitle("Umrechner");
		this.setBounds(100, 100, 500, 250);
		this.setLayout(null);
		this.setVisible(true);
		this.addWindowListener(this);
		this.setBackground(new Color(110, 200, 206));

		celsius.setBounds(37, 100, 90, 20);
		celsius.addKeyListener(this);
		this.add(celsius);

		fahrenheit.setBounds(37, 150, 90, 20);
		fahrenheit.addKeyListener(this);
		this.add(fahrenheit);

		Button b1 = new Button("Umrechnen");
		b1.setBackground(new Color(110, 200, 206));
		b1.setFont(new Font("helvetica", Font.BOLD, 14));
		b1.setBounds(330, 120, 100, 30);
		b1.addActionListener(this);
		this.add(b1);
	}

	public void paint(Graphics g) {
		g.setFont(new Font("helvetica", Font.BOLD, 18));
		g.drawString("Umrechner von Celsius (°C) und Fahrenheid (°F)", 37, 60);
		g.drawString("°C (Celsius)", 130, 115);
		g.drawString("°F (Fahrenheit)", 130, 165);

	}

	[COLOR="Red"]public void rechnung() {

		try {
			String eingabe1 = celsius.getText();
			String eingabe2 = fahrenheit.getText();
			if (eingabe1.length() != 0) {

				double Eingabewert1 = Double.parseDouble(eingabe1);
				x = ((Eingabewert1 * 9) / 5) + 32;
				fahrenheit.setText(x + "");

			} else {
				double Eingabewert2 = Double.parseDouble(eingabe2);
				y = (Eingabewert2 - 32) * 5 / 9;
				celsius.setText(y + "");
			}
		} catch (NumberFormatException e) {
			JOptionPane.showMessageDialog(this,
					"Es wurde kein oder ein Falscher Wert eingetragen",
					"Fehlermeldung", JOptionPane.WARNING_MESSAGE);
		}

	}[/COLOR]

	public void keyPressed(KeyEvent e) {

		if (e.getKeyCode() == KeyEvent.VK_ENTER) {
			rechnung();
		}

	}

	@Override
	public void windowActivated(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowClosed(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowClosing(WindowEvent arg0) {
		System.exit(0);
	}

	@Override
	public void windowDeactivated(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowDeiconified(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowIconified(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowOpened(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		rechnung();

	}

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub

	}
}

Ich danke allen für Ihre große Hilfe

MFG Kasino
 
Du kannst doch celsius.getText() prüfen auf Leer oder Null.

Ansonsten ist IsDouble(celsius.getText()) dein Freund. Damit sparst du dir den Try Catch Block.
 
Hmmm klingt interressant. Ändert das eig auch was an der Performenc?
Und wenn wir grade bei Performenc sind. Ich habe gemerkt bei .drawString("",int x,int y); ist die Performenc echt fürn ar... . Gibt es nicht dort eine andere Möglichkeit oder zumindestens eine die sich nicht so auf die Performenc auswirkt?

Gruß Kasino
 
Das hat weniger mit der Performance zu tun. Gehört sich einfach nicht für eine billige vermeidbare Exception ein Try Catch Block zu nehmen.

drawString ist nicht das Problem. Hast du mit dem Graphics Objekt noch mehr vor als nur Text anzuzeigen?
 
Nein ich will nur den text Anzeigen und habe halt den Hintergrund vom Button und vom Frame gefärbt.

Eine frage habe ich auch noch. Ich bin momentan dabei einen Taschenrechner zu programmieren und für die Ausgabe suche ich ein bestimmtes ausgabefenster. Es soll so funktionieren wie ein Textfeld auch so aussehen oder ähnlich nur das man kein Eingabe machen kann sondern nur reine Ausgabe sieht. Wie realisiere ich das ?
 
Zuletzt bearbeitet:
Indem du bei einem Textfield die Methode setEditable(false) aufrufst. Tipp: Sieh dir die Methoden zu den jeweiligen Klassen einfach an, die Methoden haben alle eine Beschreibung, da lässt sich sowas ganz schell rauslesen.
 
so macht man das sicher nicht...

entweder nimmst du ein JFormattedTextField bspw so:

NumberFormat formats = NumberFormat.getInstance();
formats.setMaximumIntegerDigits(3);
txtMeinFeld = new JFormattedTextField(formats);
((NumberFormatter)txtMeinFeld .getFormatter()).setAllowsInvalid(false);

und verbietest eingaben..

oder aber du nimmst

txtMeinFeld .setDocument(Deine eigene Klasse die von PlainDocument erbt)
und überschreibst public void insertString(int offset, String str, AttributeSet a)

Damit kannst du abhängig von der Position etc. bestimmte Zeichen verbieten, hast auch die Stelle(Länge) deiner Eingabe..

oder txtMeinFeld.getDocument().addDocumentListener(new DocumentListener(){ ....}); damit bekommst du raus ob eingegeben oder entfernt wurde..

denke die Ideen sollten reichen ;)

aber den Text parsen und ne Exception werfen ist absoluter Quark :)
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh