Swing Default Werte für JFormattedTextField und Eingaben zurücksetzen

calmar

Mitglied
hi,

Problem 1: default werte

hier mal mein code:

Java:
		panel.add(new JLabel("Verkaufspreis: "));
		selling_price = new JFormattedTextField( new DecimalFormat("#.00") );
		panel.add(selling_price, "w 60!"); 
		selling_price.setValue(new Double(0));

ich möchte, dass als default werte 0,00 angezeigt wird (das funktioniert mal) - aber wenn der user einfach mit tab weitergeht und reinschreibt (ohne vorher alles zu löschen) wird ihm sowas angezeigt "1,55,00" wenn man aufs nächste feld geht, wird dann eh alles richtig formatiert

gibt es eine möglichkeit, dass der default wert automatisch überschrieben wird? (anstatt bei der eingabe hintendran gehängt zu werden)?

hoffe ich konnte mein problem halbwegs klar machen 🙂

Problem 2:

dem user soll nach dem absenden des formulars (mit speicher-button) wieder ein leeres formular angezeigt werden - derzeit bleibt die eingabe bestehen die der user gemacht hat

soll man die werte im public void actionPerformed(ActionEvent e){...} einfach neu setzen? oder gibts da eine elegantere methode?

lg
 
danke für die antwort - aber ist nicht ganz das was ich suche

hier wird der wert sofort auf 0 zurückgesetzt und dann leider gar nicht weiterübernommen

ich wollte eigentlich, dass zb. nach erfolgreichem speichern des inhaltes der eingabemaske in meiner datenbank eine maske mit leeren feldern erscheint (dh man nicht immer die alten werte überschreiben/löschen muss wenn man was neues eingibt)

lg
 
danke für die antwort - aber ist nicht ganz das was ich suche

hier wird der wert sofort auf 0 zurückgesetzt und dann leider gar nicht weiterübernommen

ich wollte eigentlich, dass zb. nach erfolgreichem speichern des inhaltes der eingabemaske in meiner datenbank eine maske mit leeren feldern erscheint (dh man nicht immer die alten werte überschreiben/löschen muss wenn man was neues eingibt)

lg

ich hab dir was zu problem 1 geschrieben, da kommt je nachdem raus was du eingestellt hast wenn der Benutze eine falsche eingabe macht klappt es halt nicht

Du brauchst sowas hier...
NumberFormatter numberFormatter = new NumberFormatter(new DecimalFormat("#.00"));
numberFormatter.setAllowsInvalid(false);

dann kann man nix falsche eingeben und es wird immer sofort das richtige Format gemacht

zu problem 2 musst du halt eine methode reset machen und dort deine default werte wieder setzen.
 
Zuletzt bearbeitet von einem Moderator:
dankesehr so funktioniert das jetzt!

bin beim testen nun auf ein neues problem gestoßen:

Wenn ich als eingabe 1,25 (oder jede beliebige Kommazahl) mache, dann funktioniert alles problemlos.

wenn ich zb 2 eingebe, wird das zwar auf 2,00 umgewandelt, aber wenn ich auf das feld zugreife wird mir eine exception geworfen:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double

Hier die entsprechenden Codeteile:

Java:
		panel.add(new JLabel("Verkaufspreis: "));
		selling_price = new JFormattedTextField(numberFormatter);
		panel.add(selling_price, "w 60!"); 
		selling_price.setValue(new Double(0))
;

hier sieht man eh schon, wie ich versucht habe rumzucasten, bekomme es aber leider nicht hin 🙁

Java:
Double sel_price = new Double(((Double)selling_price.getValue())); 
		if(sel_price < 0){
			validationResult.addError("Sie dürfen keinen negativen Verkaufspreis eingeben!");
		}

vielen danke für eure hilfe im vorhinein!

lg
 
Keine Ahnung in welchem Zusammenhang du das machst , aber bei mir klappts
Java:
public class TestMain {
	public static void main(String[] args) {
		final JFrame frame = new JFrame("Test");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		NumberFormatter numberFormatter = new NumberFormatter(new DecimalFormat("#.00"));
		numberFormatter.setAllowsInvalid(false);
		final JFormattedTextField formattedTextField = new JFormattedTextField(numberFormatter);
		formattedTextField.setFocusLostBehavior(JFormattedTextField.COMMIT_OR_REVERT);
		formattedTextField.setValue(Double.valueOf(0));
		
		formattedTextField.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println(formattedTextField.getValue());
				
			}
			
		});
		
		frame.add(formattedTextField);
		frame.add(new JTextField(), BorderLayout.SOUTH);
		frame.pack();
		frame.setLocationRelativeTo(null);
		SwingUtilities.invokeLater(new Runnable(){
			@Override
			public void run() {
			frame.setVisible(true);
				
			}
		});
	}
}
 

Zurück
Oben