JavaFX Taschenrechner textField auf 10stellen begrenzen

killermuck

Mitglied
Hallo mein ursprüngliches Thema "Frage zum javaFX Taschenrechner" finde ich nicht mehr, wenn ich auf die Links in meiner Mail klicke
werde ich zu allen möglichen Themen geleitet nur nicht zu meinem ursprünglichen. Deshalb habe ich jetzt einen neues Thema geöffnet (Sorry! ;-))

Jetzt meine Frage:
ich versuche über try-catch eine If-Bedingung zu erstellen die mir den eingegebenen Text in Feld eingabe1 und eingabe2 die Anzahl der eingegebenen Zeichen ermittelt und wenn diese die Anzahl von 10 überschreitet dann soll er eine Fehlermeldung ausgeben.

Hier mein Code:
[CODE lang="java" title="Hier nur die Methode für das Berechnen mit dem try-catch block" highlight="14-17"] @FXML private void berechnen() {
//ergebnis muss initialisiert werden
double zahl1 = 0, zahl2 = 0, ergebnis = 0;
boolean fehlerFlag = false;

//jetzt mit Fehlerbehandlung und Ausgabe der Meldung durch eine einge Methode
try {
//fuer das Konvertieren
Number wert = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe1.getText());
//zahl1 als double deklarieren, um damit rechnen zu koennen
zahl1 = wert.doubleValue();
}
catch (Exception ParseException) {
if (eingabe1.getText().length() > 10)
fehlermeldung(eingabe1);
ausgabe.setText("Nicht def.");
return;
}
try {
//fuer das Konvertieren
Number wert = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe2.getText());
//zahl2 als double deklarieren, um damit rechnen zu koennen
zahl2 = wert.doubleValue();
}
catch (Exception ParseException) {
if (eingabe2.getText().length() > 10) {
fehlermeldung(eingabe2);
return;
}
}

//welche Operation ist ausgewaehlt?
//die Auswahl wird ausgewertet ueber die Methode getSelectedItem()
//die Methode ermittelt den aktuellen Eintrag von auswahl
String tempAuswahl = auswahl.getSelectionModel().getSelectedItem().toString();
if (tempAuswahl.equals("Addition"))
ergebnis = zahl1 + zahl2;
if (tempAuswahl.equals("Subtraktion"))
ergebnis = zahl1 - zahl2;
if (tempAuswahl.equals("Multiplikation"))
ergebnis = zahl1 * zahl2;
if (tempAuswahl.equals("Division")) {
if (zahl2 != 0)
ergebnis = zahl1 / zahl2;
else
fehlerFlag = true;
}

//wenn es keine Probleme gegeben hat, liefern wir das Ergebnis zurueck
if (fehlerFlag == false) {
DecimalFormat formatFolge = new DecimalFormat("#,##0.00");
String tempausgabe = formatFolge.format(ergebnis);
//das Format anwenden, das Ergebnis ist eine Zeichenkette
ausgabe.setText(tempausgabe);
}
else
ausgabe.setText("Nicht def.");
return;
}

//die Methode fuer die Fehlermeldung eingabe1
@FXML private void fehlermeldung(TextField eingabe1) {
Alert meinDialog = new Alert(AlertType.INFORMATION, "Ihre Eingabe hat mehr als 10 Stellen");
//den Text setzen
meinDialog.setHeaderText("Eingabefehler");
//den Dialog anzeigen
meinDialog.showAndWait();
}[/CODE]

Hier nochmal danke an kneitzel für seine wirklich super Tips auf meine ursprünglichen Eintrag. Ich werde es lieber so umsetzen, wie in der Aufgabe gestellt.
Ich soll den java-Swing Taschenrechner in javaFX umsetzen, deshalb habe ich den swing-Code 1:1 übernommen und nur die Befehle angepasst aber nichts am Aufbau der Aufgabe.
 
M

Mart

Gast
du kommst ja nicht in den catch block wenn die werte es überschreiten sondern nur dann wenn jemand kein double ausgibt

zu meiner ursprünglichen antwort

du machst einen eventlistener
dieser filtert alles raus was keine zahl oder komma ist


wenn du dann deinen button klickst nimmst du es als double einfach raus, naütrlich muss man mehrere kommas beachten

nur dann brauchst du nicht permanent ohne pause es in ein double caste nund einen catch block haben der niemals ausgeführt wird ausser dann wenn es zu spät ist
 
K

kneitzel

Gast
Bei sowas würde ich dir empfehlen, dir den Ablauf genau zu überlegen. Dabei ist es auch immer deutlich besser, wenn der Code auch übersichtlich ist - und das erreicht man am Besten durch eine Unterteilung in mehrere Methoden.

Die wichtige Frage ist: Wann willst Du denn die Meldung bringen? Derzeit bringst Du die Meldung nur, wenn der Wert nicht in eine Zahl umgewandelt wird und die Länge nicht stimmt.

Das klingt aber doch nach einer typischen Validierung:
Eine Methode prüft als Erstes, ob alle Bedingungen erfüllt sind und bricht ggf. ab.

Also typisches Beispiel:
Java:
public String reverse(String value) {
    if (value == null) return null;
    
    // Weiterer Code ...
}

Daher wäre mein Ratschlag: Überlege Dir, was die Methode zum arbeiten braucht. Und das prüfst Du zuerst:
- Länge beider Eingaben prüfen...
- Werte lassen sich in Zahlen umwandeln. (Wäre für mich ein Block!)
- Dann die Berechnung

Ein paar weitere Tipps:
a) evtl. willst Du Dir angewöhnen, generell { } zu nutzen. Code wird schnell unleserlich wie z.B. hier:
Java:
        if (tempAuswahl.equals("Division")) {
            if (zahl2 != 0)
                ergebnis = zahl1 / zahl2;
                else
                    fehlerFlag = true;
        }
Da steht und fällt alles mit der richtigen Einrückung ...

b) Vergleiche mit == true und == false sind unnötig. Also aus if (fehlerFlag == false) kannst Du einfach if (!fehlerFlag) machen. Und wenn Du die Blöcke tauschst, dann entfällt auch das !.
 

killermuck

Mitglied
Hallo,
habe das ganze jetzt folgendermaßen mit if...else-if...else umgesetzt. eingabe1 und eingabe2 werden auch auf mehr als 10 Stellen abgeprüft und die fehlermeldung2() wird ausgeführt. Allerdings wird das Fehlermeldungsfenster 2x angezeigt und ich muss es 2 mal mit OK bestätigen.
Warum ist das so, ich komm einfach nicht drauf?
[CODE lang="java" highlight="54-59, 126-134"]package de.scheurig;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.Alert.AlertType;

public class FXMLController {
//das Label
@FXML private Label ausgabe = new Label();
//das Kombinationsfeld
@FXML private ComboBox<String> auswahl;
//die Eingabefelder
@FXML private TextField eingabe1 = new TextField();
@FXML private TextField eingabe2 = new TextField();
//Variable fuer das Zwischenspeichern des Dezimalformates
//@FXML String tempausgabe;

@FXML protected void auswahlNeu(ActionEvent event) {
//zum Zwischenspeichern
//die Auswahl beschaffen und zwischenspeichern
String tempAuswahl = auswahl.getSelectionModel().getSelectedItem();
if (tempAuswahl.equals("Addition"))
berechnen();
if (tempAuswahl.equals("Subtraktion"))
berechnen();
if (tempAuswahl.equals("Division"))
berechnen();
if (tempAuswahl.equals("Multiplikation"));
berechnen();
}

//die Methode wird nach dem Verarbeiten der FXML-Anweisungen ausgefuehrt
@FXML void initialize() {
//die Eintraege im Kombinationsfeld setzen
auswahl.getItems().addAll("Addition", "Subtraktion", "Division", "Multiplikation");
//den ersten Eintrag auswaehlen
auswahl.getSelectionModel().selectFirst();
}

@FXML private void berechnen() {
//ergebnis muss initialisiert werden
double zahl1 = 0, zahl2 = 0, ergebnis = 0;
boolean fehlerFlag = false;

//die Pruefung, ob eingabe1 oder eingabe2 mehr als 10 Stellen hat
if (eingabe1.getLength() > 10)
fehlermeldung2();
else if (eingabe2.getLength() > 10)
fehlermeldung2();
else
//jetzt mit Fehlerbehandlung und Ausgabe der Meldung durch eine einge Methode
try {
//fuer das Konvertieren
Number wert = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe1.getText());
//zahl1 als double deklarieren, um damit rechnen zu koennen
zahl1 = wert.doubleValue();
}
catch (Exception ParseException) {
fehlermeldung();
//das Ergebnis ist nicht definiert
ausgabe.setText("Nicht def.");
return;
}
try {
//fuer das Konvertieren
Number wert = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe2.getText());
//zahl2 als double deklarieren, um damit rechnen zu koennen
zahl2 = wert.doubleValue();

}
catch (Exception ParseException) {
fehlermeldung();
//das Ergebnis ist nicht definiert
ausgabe.setText("Nicht def.");
return;
}

//welche Operation ist ausgewaehlt?
//die Auswahl wird ausgewertet ueber die Methode getSelectedItem()
//die Methode ermittelt den aktuellen Eintrag von auswahl
String tempAuswahl = auswahl.getSelectionModel().getSelectedItem().toString();
if (tempAuswahl.equals("Addition"))
ergebnis = zahl1 + zahl2;
if (tempAuswahl.equals("Subtraktion"))
ergebnis = zahl1 - zahl2;
if (tempAuswahl.equals("Multiplikation"))
ergebnis = zahl1 * zahl2;
if (tempAuswahl.equals("Division")) {
if (zahl2 != 0)
ergebnis = zahl1 / zahl2;
else
fehlerFlag = true;
}

//wenn es keine Probleme gegeben hat, liefern wir das Ergebnis zurueck
if (fehlerFlag == false) {
DecimalFormat formatFolge = new DecimalFormat("#,##0.00");
String tempausgabe = formatFolge.format(ergebnis);
//das Format anwenden, das Ergebnis ist eine Zeichenkette
ausgabe.setText(tempausgabe);
}
else
ausgabe.setText("Nicht def.");
return;
}

//die Methode fuer die Fehlermeldung
@FXML private void fehlermeldung() {
Alert meinDialog = new Alert(AlertType.INFORMATION, "Ihre Eingabe ist ungueltig");
//den Text setzen
meinDialog.setHeaderText("Eingabefehler");
//den Dialog anzeigen
meinDialog.showAndWait();
return;
}

//die Methode fuer die Fehlermeldung mehr als 10 Stellen
@FXML private void fehlermeldung2() {
Alert meinDialog = new Alert(AlertType.INFORMATION, "Ihre Eingabe hat mehr als 10 Stellen");
//den Text setzen
meinDialog.setHeaderText("Eingabefehler");
//den Dialog anzeigen
meinDialog.showAndWait();
return;
}

//die Methode zum Beenden
@FXML protected void beendenKlick(ActionEvent event) {
Platform.exit();
}
}
[/CODE]

Vielen Dank im Voraus für eure Hilfe.
 
M

Mart

Gast
weil du bei dem markierten Text das else nicht richtig eingeklammert hast, du hast nur das nächste try in dem else obwohl beide try Blöcke rein gehören


ausserdem schreit dein Code nach switches
 

killermuck

Mitglied
Habe jetzt die kompletten try...catch Blöcke folgendermaßen mit else reingenommen. Der Effekt ist immer noch gleich, die Fehlermeldung kommt 2 mal.

Du meinst doch sicher mit switches einen switch...case oder?
 
K

kneitzel

Gast
Paar tipps, die Du evtl. generell übernehmen solltest in Deinem Code:

a) Setze immer { } bei if/else Blöcken!
b) Halte Methoden klein! berechnen geht von Zeile 49 bis 116 oder so. Sorry, aber das sind Dinge, die du bei beruflichen Software Entwicklern in der Regel nie sehen wirst! Aber ok - du musst besser sein als alle "Profis" ...

Wenn Du das berücksichtigst, dann hast Du solche Probleme nicht! Dann fehlt eigentlich nur noch das Thema testen. Aber da kann ich jetzt nicht einmal das "Unit Testing für Arme/Dumme" anführen, denn mit dem "Ich mixe alles in den UI Code rein" klappt das leider nicht mehr.
 

killermuck

Mitglied
Hallo kniezel,

habe jetzt das ganze mit deiner ersten Antwort, alles in separate Methoden zu verpacken versucht. Allerdings rechnet er jetzt falsch:
Beispiel: zahl1 = 10/zahl2 = 3
Ergebnisse - Subtraktion = 0 / Addition = 20 / Multiplikation = 100 / Division = 1
[CODE lang="java" title="die verwendeten Methoden fuer das berechnen"]@FXML private void berechnen() {
try {
Number wert = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe1.getText());
double zahl1 = wert.doubleValue();
double zahl2 = wert.doubleValue();

String tempAuswahl = auswahl.getSelectionModel().getSelectedItem().toString();
if (tempAuswahl.equals("Addition")) {
showResult(zahl1+zahl2);
} else if (tempAuswahl.equals("Subtraktion")) {
showResult(zahl1-zahl2);
} else if (tempAuswahl.equals("Multiplikation")) {
showResult(zahl1*zahl2);
} else if (tempAuswahl.equals("Division")) {
if (zahl2 != 0) {
showResult(zahl1/zahl2);
} else {
showResult("Nicht def.");
}
}
}
catch (Exception ParseException) {
//bei Problemen einen Dialog erzeugen
Alert meinDialog = new Alert(AlertType.INFORMATION, "Die Eingabe war nicht korrekt");
meinDialog.setHeaderText("Bitte beachten");
meinDialog.showAndWait();
}
}


//die Methode fuer die Fehlermeldung mehr als 10 Stellen
@FXML private void fehlermeldung2() {
if (eingabe1.getLength() < 10 && eingabe2.getLength() < 10) {
return;
}
else {
Alert meinDialog = new Alert(AlertType.INFORMATION, "Ihre Eingabe hat mehr als 10 Stellen");
//den Text setzen
meinDialog.setHeaderText("Eingabefehler");
//den Dialog anzeigen
meinDialog.showAndWait();
return;
}
}

//die Methode fuer die Ausgabe des Ergebnisses
private void showResult(String text) {
ausgabe.setText(text);
}

private void showResult(double value) {
DecimalFormat formatFolge = new DecimalFormat("#,##0.00");
String tempausgabe = formatFolge.format(value);
ausgabe.setText(tempausgabe);
}[/CODE]
 

killermuck

Mitglied
so diesen Fehler habe ich jetzt behoben.
Leider besteht immer noch das Problem, egal an welcher Stelle in berechen ich die Methode fehlermeldung2 aufrufe, wirft er mir den Fehlerdialog 2 mal aus und ich muss diesen 2 mal mit ok bestätigen. An was kann das jetzt liegen? (siehe gesendeter Code vor 19 Minuten)

Danke im Voraus!
 
K

kneitzel

Gast
Du hast in der letzten Version die Du gezeigt hast (#8) keinen Aufruf mehr von fehlermeldung2.

Daher wäre es evtl. hilfreich, wenn Du den aktuellen Code noch einmal zeigst.
 

killermuck

Mitglied
Sorry, hier nochmal der Code
[CODE lang="java" highlight="11-26"]@FXML private void berechnen() {
double zahl1 = 0, zahl2 = 0, ergebnis = 0;

try {
Number wert1 = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe1.getText());
Number wert2 = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe2.getText());
zahl1 = wert1.doubleValue();
zahl2 = wert2.doubleValue();

String tempAuswahl = auswahl.getSelectionModel().getSelectedItem().toString();
if (tempAuswahl.equals("Addition")) {
fehlermeldung();
showResult(zahl1+zahl2);
} else if (tempAuswahl.equals("Subtraktion")) {
fehlermeldung();
showResult(zahl1-zahl2);
} else if (tempAuswahl.equals("Multiplikation")) {
fehlermeldung();
showResult(zahl1*zahl2);
} else if (tempAuswahl.equals("Division")) {
if (zahl2 != 0) {
fehlermeldung();
showResult(zahl1/zahl2);
} else {
showResult("Nicht def.");
}
}
}
catch (Exception ParseException) {
//bei Problemen einen Dialog erzeugen
Alert meinDialog = new Alert(AlertType.INFORMATION, "Die Eingabe war nicht korrekt");
meinDialog.setHeaderText("Bitte beachten");
meinDialog.showAndWait();
}
}


//die Methode fuer die Fehlermeldung mehr als 10 Stellen
@FXML private void fehlermeldung() {
if (eingabe1.getLength() < 10 && eingabe2.getLength() < 10) {
return;
}
else {
Alert meinDialog = new Alert(AlertType.INFORMATION, "Ihre Eingabe hat mehr als 10 Stellen");
//den Text setzen
meinDialog.setHeaderText("Eingabefehler");
//den Dialog anzeigen
meinDialog.showAndWait();
return;
}
}

//die Methode fuer die Ausgabe des Ergebnisses
private void showResult(String text) {
ausgabe.setText(text);
}

private void showResult(double value) {
DecimalFormat formatFolge = new DecimalFormat("#,##0.00");
String tempausgabe = formatFolge.format(value);
ausgabe.setText(tempausgabe);
}[/CODE]
 
M

Mart

Gast
allgemeine sache... variablen durchzunummeriern oder methoden macht nicht immer sinn

wenn du von java ne exception bekommst zb heist die
NullPointerException
und du hast sobald du das liest halbwegs plan was es bedeutet einfach weil es der name schon sagt
dein
sagt mir einfach dass irgendein felher passiert und irgendwas passiert ka was... das kann man verbessern
das zu verbessern hat auch zur folge dass die Leute die dir helfen wollen ( was sehr viele sind ) es einfacher haben dir zu helfen

es ist halt aus sicht des helfers einfach nur blöd wenn alles lächerlich benannt sit weil warum sollte der Helfer sich für den Code interessieren wenn du es selber nicht tust

das mit dem "nicht interessieren" ist eine behauptung die die Helfer aufstellen sobald sie den Code lesen unabhängig ob es wahr ist


zu der Vorherigen frage von dir
ja mit switches meinte ich switch cases
 

killermuck

Mitglied
Zuerst mal danke für die konstruktive Kritik, die nehme ich echt dankend an, da ich es ja lernen will und letztendlich soll ja alles korrekt nach den Vorgaben programmiert sein.

Hier mein aktueller Code in dem ich versucht habe alles als separate Methoden zu packen. Tue mich allerdings irgendwie sehr schwer jetzt mit der Fehlerbehandlung und dem switch...case. Ich habe meinen versuch mal als Kommentierung /*...*/ mit drin. Könnte mir da jemand bitte weiterhelfen?

Danke im Voraus
Java:
package de.scheurig;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;

import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.Alert.AlertType;

public class FXMLController {
    //die Variable fuer Fehlerbehandlung
    //0 = kein Fehler - 1 = parse-Fehler - 2 = eingabe groesser 10 Stellen
    private int fehlerNummer = 0;
    //das Label
    @FXML private Label ausgabe = new Label();
    //das Kombinationsfeld
    @FXML private ComboBox<String> auswahl;
    //die Eingabefelder
    @FXML private TextField eingabe1 = new TextField();
    @FXML private TextField eingabe2 = new TextField();
            
    @FXML protected void auswahlNeu(ActionEvent event) throws Exception {
        //zum Zwischenspeichern
        //die Auswahl beschaffen und zwischenspeichern
        String tempAuswahl = auswahl.getSelectionModel().getSelectedItem();
        if (tempAuswahl.equals("Addition"))
            berechnen();
        if (tempAuswahl.equals("Subtraktion"))
            berechnen();
        if (tempAuswahl.equals("Division"))
            berechnen();
        if (tempAuswahl.equals("Multiplikation"));
            berechnen();
    }
    
    //die Methode wird nach dem Verarbeiten der FXML-Anweisungen ausgefuehrt
    @FXML void initialize() {
        //die Eintraege im Kombinationsfeld setzen
        auswahl.getItems().addAll("Addition", "Subtraktion", "Division", "Multiplikation");
        //den ersten Eintrag auswaehlen
        auswahl.getSelectionModel().selectFirst();
    }
    
    private void berechnen() throws Exception {
        double zahl1 = 0, zahl2 = 0;
        
        Number wert1 = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe1.getText());
        Number wert2 = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe2.getText());
        zahl1 = wert1.doubleValue();
        zahl2 = wert2.doubleValue();
            
            
        String tempAuswahl = auswahl.getSelectionModel().getSelectedItem().toString();
            if (tempAuswahl.equals("Addition")) {
                showResult(zahl1+zahl2);
            } else if (tempAuswahl.equals("Subtraktion")) {
                showResult(zahl1-zahl2);
              } else if (tempAuswahl.equals("Multiplikation")) {
                  showResult(zahl1*zahl2);
                } else if (tempAuswahl.equals("Division")) {
                    if (zahl2 != 0) {
                        showResult(zahl1/zahl2);
                    } else {
                        showResult("Nicht def.");
                        fehlerNummer = 1;
                      }
                  }
    }       
  
    /*private void fehler() throws Exception {
            if (eingabe1.getLength() > 10)
                fehlerNummer = 2;
            System.out.println(fehlerNummer);
            switch (fehlerNummer) {
                case '0':
                    berechnen();
                    break;
                case '1':
                    try {
                        berechnen();
                    }
                    catch (Exception e) {
                        Alert meinDialog = new Alert(AlertType.INFORMATION, "Ihre Eingabe hat mehr als 10 Stellen");
                        //den Text setzen
                        meinDialog.setHeaderText("Eingabefehler");
                        //den Dialog anzeigen
                        meinDialog.showAndWait();
                    }   
                    break;
                case '2':
                    try {
                        berechnen();
                    }
                    catch (ParseException e) {
                        //bei Problemen einen Dialog erzeugen
                        Alert meinDialog = new Alert(AlertType.INFORMATION, "Die Eingabe war nicht korrekt");
                        meinDialog.setHeaderText("Bitte beachten");
                        meinDialog.showAndWait();
                    }
                    break;
            }                                                           
    }*/
    
    //die Methode fuer die Ausgabe des Ergebnisses
    private void showResult(String text) {
         ausgabe.setText(text);
    }
    
    //die Methode fuer das Dezimalformat
    private void showResult(double value) {
        DecimalFormat formatFolge = new DecimalFormat("#,##0.00");
        String tempausgabe = formatFolge.format(value);
        ausgabe.setText(tempausgabe);
    }
    
    //die Methode zum Beenden
    @FXML protected void beendenKlick(ActionEvent event) {
        Platform.exit();
    }
}
 

killermuck

Mitglied
Hallo nochmal,

hab jetzt einiges durchprobiert. Letzter Versuch Code siehe unten.
Ich würde gerne zuerst die Problematik beheben, dass mir die beiden Fehlermeldungen je 2 mal ausgegeben werden und ich muss diese 2 mal mit OK bestätigen. Ich hab zuletzt mit switch...case versucht, ist aber immer noch das selbe.

Erst wenn dieses Problem behoben ist, dann werde ich mich daran machen alles in separate Methoden zu verpacken.

Bitte bitte schaut euch das noch mal an ich komm einfach nicht weiter!

Ich weiß auch, dass ich noch vieles falsch mache hier im Forum, das tut mir sehr leid. Ich gelobe Besserung!

[CODE lang="java" highlight="56-82"]package de.scheurig;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;

public class FXMLController {
//das Label
@FXML private Label ausgabe = new Label();
//das Kombinationsfeld
@FXML private ComboBox<String> auswahl;
//die Eingabefelder
@FXML private TextField eingabe1 = new TextField();
@FXML private TextField eingabe2 = new TextField();
//Variable fuer das Zwischenspeichern des Dezimalformates
//@FXML String tempausgabe;

@FXML protected void auswahlNeu(ActionEvent event){
//zum Zwischenspeichern
//die Auswahl beschaffen und zwischenspeichern
String tempAuswahl = auswahl.getSelectionModel().getSelectedItem();
if (tempAuswahl.equals("Addition"))
berechnen();
if (tempAuswahl.equals("Subtraktion"))
berechnen();
if (tempAuswahl.equals("Division"))
berechnen();
if (tempAuswahl.equals("Multiplikation"));
berechnen();
}

//die Methode wird nach dem Verarbeiten der FXML-Anweisungen ausgefuehrt
@FXML void initialize() {
//die Eintraege im Kombinationsfeld setzen
auswahl.getItems().addAll("Addition", "Subtraktion", "Division", "Multiplikation");
//den ersten Eintrag auswaehlen
auswahl.getSelectionModel().selectFirst();
}

@FXML private void berechnen() {
//ergebnis muss initialisiert werden
double zahl1 = 0, zahl2 = 0, ergebnis = 0;
boolean fehlerFlag = false;
//Variable fuer switch...case zur Fehlerauswertung
int fehlerCase = 0;

//jetzt mit Fehlerbehandlung
if (eingabe1.getLength() > 10 || eingabe2.getLength() > 10) {
fehlerCase = 1;
}
else if (eingabe1.getLength() < 10 || eingabe2.getLength() < 10) {
fehlerCase = 2;
}

switch (fehlerCase) {
case 1:
fehlerEingabegr10Zeichen();
break;
case 2:
try {
Number wert1 = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe1.getText());
//zahl2 als double deklarieren, um damit rechnen zu koennen
zahl1 = wert1.doubleValue();
Number wert2 = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe2.getText());
//zahl2 als double deklarieren, um damit rechnen zu koennen
zahl2 = wert2.doubleValue();
}
catch (Exception parseException) {
fehlerParse();
ausgabe.setText("Nicht def.");
}
break;
}

//welche Operation ist ausgewaehlt?
//die Auswahl wird ausgewertet ueber die Methode getSelectedItem()
//die Methode ermittelt den aktuellen Eintrag von auswahl
String tempAuswahl = auswahl.getSelectionModel().getSelectedItem().toString();
if (tempAuswahl.equals("Addition"))
ergebnis = zahl1 + zahl2;
if (tempAuswahl.equals("Subtraktion"))
ergebnis = zahl1 - zahl2;
if (tempAuswahl.equals("Multiplikation"))
ergebnis = zahl1 * zahl2;
if (tempAuswahl.equals("Division")) {
if (zahl2 != 0)
ergebnis = zahl1 / zahl2;
else {
fehlerFlag = true;
}
}
//wenn es keine Probleme gegeben hat, liefern wir das Ergebnis zurueck
if (fehlerFlag == false) {
DecimalFormat formatFolge = new DecimalFormat("#,##0.00");
String tempausgabe = formatFolge.format(ergebnis);
//das Format anwenden, das Ergebnis ist eine Zeichenkette
ausgabe.setText(tempausgabe);
}
else
ausgabe.setText("Nicht def.");
return;
}

//die Methode fuer die Fehlermeldung Parsefehler
@FXML void fehlerParse() {
Alert meinDialog = new Alert(AlertType.INFORMATION, "Ihre Eingabe ist ungueltig");
//den Text setzen
meinDialog.setHeaderText("Eingabefehler");
//den Dialog anzeigen
meinDialog.showAndWait();
return;
}

//die Methode fuer die Fehlermeldung mehr als 10 Stellen
@FXML void fehlerEingabegr10Zeichen() {
Alert meinDialog = new Alert(AlertType.INFORMATION, "Ihre Eingabe hat mehr als 10 Stellen");
//den Text setzen
meinDialog.setHeaderText("Eingabefehler");
//den Dialog anzeigen
meinDialog.showAndWait();
return;
}

//die Methode zum Beenden
@FXML protected void beendenKlick(ActionEvent event) {
Platform.exit();
}
}[/CODE]
 
K

kneitzel

Gast
Dann zeig auch mal das fxml und beschreibe genau, was du wie testet, damit das Problem auftritt.

Vermutlich kommt es, weil Du aus dem FXML diverse Dinge automatisch aufrufen lässt, die so vermutlich keinen Sinn machen.
auswahlNeu hat ein @FXML und wird vermutlich bei irgendwelchen Events aufgerufen.
berechnen wird vermutlich auch referenziert worden sein.

Erst wenn dieses Problem behoben ist, dann werde ich mich daran machen alles in separate Methoden zu verpacken.
Und das ist die falschen Reihenfolge. Du hast etwas,das Du nicht überblicken kannst und willst dann einen Fehler finden (bei dem ich zudem vermute, dass da noch an ganz anderer Stelle etwas falsch ist). Wie willst Du einen Fehler beheben ohne zu verstehen, was wo wie laufen müsste um dann Abweichungen ggf. zu finden und zu beheben?

Das kann auch für Dich schlicht nur deprimierend sein. Ich will Dir hier auch gar keine Vorwürfe machen, aber diejenigen, die Anfänger mit JavaFX Oberflächen arbeiten lassen, denen würde ich sehr gerne meine Meinung sagen. Der Code ist an vielen Stellen einfach schlimm.

Wenn die UI aus einem FXML generiert wird, dann haben da keine Controls erstellt zu werden! Also nix "= new Label()" oder so!

Und dann die Logik: Du hast ein Element, da kann der Benutzer eines der vorgegebenen Werte auswählen. Da kann also nur eines der Werte Addition", "Subtraktion", "Division", "Multiplikation" ausgewählt werden.

Wenn aber nichts anderes ausgewählt werden kann: Was bitte meinst Du dann hier prüfen zu müssen?
Java:
    @FXML protected void auswahlNeu(ActionEvent event){
        //zum Zwischenspeichern
        //die Auswahl beschaffen und zwischenspeichern
        String tempAuswahl = auswahl.getSelectionModel().getSelectedItem();
        if (tempAuswahl.equals("Addition"))
            berechnen();
        if (tempAuswahl.equals("Subtraktion"))
            berechnen();
        if (tempAuswahl.equals("Division"))
            berechnen();
        if (tempAuswahl.equals("Multiplikation"));
            berechnen();
    }
 

killermuck

Mitglied
Hier der code in dem alles in separaten Methoden ist.

Gehe ich richtig in der Annahme, das die Zeilen 25-45 für das Dropdown mit seinen Einträgen und die Reaktion (auswahlNeu) auf die Auswahl ist?
Diese muss ja im Scene Builder für das Dropdownfeld "auswahlNeu" als onAction-Code hinterlegt werden und ist zwingend nötig, oder?

Die 3 Dialoge für die Fehler werden jeweils 2 mal ausgeworfen und ich kann nicht nach vollziehen warum?
Java:
package de.scheurig;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;

public class FXMLController {
    //das Label
    @FXML private Label ausgabe = new Label();
    //das Kombinationsfeld
    @FXML private ComboBox<String> auswahl;
    //die Eingabefelder
    @FXML private TextField eingabe1 = new TextField();
    @FXML private TextField eingabe2 = new TextField();
            
    @FXML protected void auswahlNeu(ActionEvent event){
        //zum Zwischenspeichern
        //die Auswahl beschaffen und zwischenspeichern
        String tempAuswahl = auswahl.getSelectionModel().getSelectedItem();
        if (tempAuswahl.equals("Addition"))
            berechnen();
        if (tempAuswahl.equals("Subtraktion"))
            berechnen();
        if (tempAuswahl.equals("Division"))
            berechnen();
        if (tempAuswahl.equals("Multiplikation"));
            berechnen();
    }
  
    //die Methode wird nach dem Verarbeiten der FXML-Anweisungen ausgefuehrt
    @FXML void initialize() {
        //die Eintraege im Kombinationsfeld setzen
        auswahl.getItems().addAll("Addition", "Subtraktion", "Division", "Multiplikation");
        //den ersten Eintrag auswaehlen
        auswahl.getSelectionModel().selectFirst();
    }
    
     @FXML private void berechnen() {

        try {
            Number wert1 = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe1.getText());
            Number wert2 = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe2.getText());
            double zahl1 = wert1.doubleValue();
            double zahl2 = wert2.doubleValue();
            
            //zum Zwischenspeichern
            //die Auswahl beschaffen und zwischenspeichern
            String tempAuswahl = auswahl.getSelectionModel().getSelectedItem().toString();
            if (tempAuswahl.equals("Addition")) {
                showResult(zahl1 + zahl2);
            } else if (tempAuswahl.equals("Subtraktion")) {
                showResult(zahl1 - zahl2);
            } else if (tempAuswahl.equals("Multiplikation")) {
                showResult(zahl1 * zahl2);
            } else if (tempAuswahl.equals("Division")) {
                if (zahl2 != 0) {
                    showResult(zahl1 / zahl2);
                } else {
                    showResult("Nicht def.");
                    Alert meinDialog = new Alert(AlertType.INFORMATION, "Division durch 0 ist nicht zulaessig");
                    //den Text setzen
                    meinDialog.setHeaderText("Eingabefehler");
                    //den Dialog anzeigen
                    meinDialog.showAndWait();
                  }
            }
        } catch(Exception ParseException) {
                //bei Problemen einen Dialog erzeugen
                fehlerParse();
          }
        if (eingabe1.getLength() > 10 || eingabe2.getLength() > 10) {
            fehlerEingabegr10Zeichen();
            showResult("Nicht def.");
        }
    }
      
    private void showResult(String text) {
       ausgabe.setText(text);
    }
        
    private void showResult(double value) {
        DecimalFormat formatFolge = new DecimalFormat("#,##0.00");
        String tempausgabe = formatFolge.format(value);
        //das Format anwenden, das Ergebnis ist eine Zeichenkette
        ausgabe.setText(tempausgabe);
    }

    //die Methode fuer die Fehlermeldung Parsefehler
    private void fehlerParse() {
        Alert meinDialog = new Alert(AlertType.INFORMATION, "Ihre Eingabe ist ungueltig");
        //den Text setzen
        meinDialog.setHeaderText("Eingabefehler");
        //den Dialog anzeigen
        meinDialog.showAndWait();
    }
    
    //die Methode fuer die Fehlermeldung mehr als 10 Stellen
    private void fehlerEingabegr10Zeichen() {
            Alert meinDialog = new Alert(AlertType.INFORMATION, "Ihre Eingabe hat mehr als 10 Stellen");
            //den Text setzen
            meinDialog.setHeaderText("Eingabefehler");
            //den Dialog anzeigen
            meinDialog.showAndWait();
    }

    //die Methode zum Beenden
    @FXML protected void beendenKlick(ActionEvent event) {
        Platform.exit();
    }
}
 

killermuck

Mitglied
sorry,

getestet wurde mit :

zahl1 = 10
zahl2 = 3
rechnet mit allen Rechenarten korrekt

zahl1 oder zahl2 mit 12345678901 (also mehr als 10 stellen)
Dialog aus Methode fehlerEingabegr10Zeichen() wird 2x ausgegeben

zahl1 oder zahl2 mit Buchstaben als Eingabe
Dialog aus Methode fehlerParse() wird 2x ausgegeben

zahl2 mit Wert 0
Dialog für Division durch 0 wird 2x ausgegeben.
 
K

kneitzel

Gast
Gehe ich richtig in der Annahme, das die Zeilen 25-45 für das Dropdown mit seinen Einträgen und die Reaktion (auswahlNeu) auf die Auswahl ist?
Diese muss ja im Scene Builder für das Dropdownfeld "auswahlNeu" als onAction-Code hinterlegt werden und ist zwingend nötig, oder?
Wenn im Dropdown etwas ausgewählt wird: Was soll dann passieren?

Da Du ja wohl einen Button fürs berechnen hast, würde ich vermuten, dass dann erst einmal noch nichts berechnet werden soll. Daher ist kein Aufruf der entsprechenden Methode notwendig. Und wenn da sonst nichts gemacht wird, dann brauchst Du da auch keinerlei onAction zu hinterlegen.

Und ich sehe am Code keinen Grund für mehrfache Dialoge. Daher noch einmal die Bitte, dass Du auch das fxml zur Verfügung stellst.
 

killermuck

Mitglied
Das binding hatte ich im kurs noch nicht. Wäre das dann so förderlich, wenn ich es schon benützen würde?
Aber anschauen würde ich mir das gern mal, wie funktioniert das? Oder wird das jetzt zu komplex hier?
Wie stelle ich das dem fxml zur Verfügung? Ich steh gerade voll auf dem Schlauch!!!!
 
K

kneitzel

Gast
Du solltest eine Datei haben mit der Endung fxml, welche Du vermutlich im Code mit dem FXMLLoader lädst. Das ist eine Textdatei im sogenannten XML Format. Den Text aus der Datei kannst Du wie Code hier posten - dabei als Sprache einfach XML auswählen.

Bindings selbst sehe ich eher kritisch. Das steigert die Komplexität weil im Hintergrund noch mehr passiert und ganz neue Konzepte verstanden werden müssten (neue Klassen natürlich auch).

Zur Not einfach mal das ganze Projekt in ein ZIP Packen und an mich senden: konrad@kneitzel.de.
 

killermuck

Mitglied
hier die FXML-Datei als Code.

Noch eine Frage, die Änderungen in dieser Datei müssen die manuell programmiert werden, oder lassen sich diese über den Scene Builder abbilden? (Das Projekt schicke ich dir auch per Mail als ZIP-Datei)

XML:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>

<GridPane alignment="TOP_RIGHT" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onDragDetected="#auswahlNeu" prefHeight="150.0" prefWidth="483.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.scheurig.FXMLController">
  <columnConstraints>
      <ColumnConstraints hgrow="SOMETIMES" maxWidth="126.0" minWidth="10.0" prefWidth="10.0" />
    <ColumnConstraints hgrow="SOMETIMES" maxWidth="222.0" minWidth="10.0" prefWidth="222.0" />
      <ColumnConstraints hgrow="SOMETIMES" maxWidth="128.0" minWidth="1.0" prefWidth="10.0" />
    <ColumnConstraints hgrow="SOMETIMES" maxWidth="265.0" minWidth="10.0" prefWidth="213.0" />
  </columnConstraints>
  <rowConstraints>
      <RowConstraints maxHeight="148.0" minHeight="0.0" prefHeight="148.0" vgrow="SOMETIMES" />
  </rowConstraints>
   <children>
      <TitledPane alignment="TOP_LEFT" animated="false" collapsible="false" contentDisplay="BOTTOM" prefHeight="120.0" prefWidth="195.0" text="Ein-und Ausgabe" GridPane.columnIndex="1">
         <graphic>
            <GridPane prefHeight="90.0" prefWidth="185.0">
              <columnConstraints>
                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
              </columnConstraints>
              <rowConstraints>
                <RowConstraints maxHeight="45.0" minHeight="10.0" prefHeight="45.0" vgrow="SOMETIMES" />
                  <RowConstraints maxHeight="29.0" minHeight="10.0" prefHeight="15.0" vgrow="SOMETIMES" />
                <RowConstraints maxHeight="30.0" minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
              </rowConstraints>
               <children>
                  <GridPane vgap="10.0">
                    <columnConstraints>
                      <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
                    </columnConstraints>
                    <rowConstraints>
                      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                    </rowConstraints>
                     <children>
                        <TextField fx:id="eingabe1" accessibleText="1234567890" promptText="Zahl1: " />
                        <TextField fx:id="eingabe2" promptText="Zahl2:" GridPane.rowIndex="1" />
                     </children>
                  </GridPane>
                  <TitledPane animated="false" collapsible="false" contentDisplay="RIGHT" expanded="false" text="Ergebnis:" GridPane.rowIndex="2">
                    <content>
                      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
                    </content>
                     <graphic>
                        <Label fx:id="ausgabe" />
                     </graphic>
                  </TitledPane>
               </children>
            </GridPane>
         </graphic>
      </TitledPane>
      <GridPane alignment="CENTER" prefHeight="148.0" prefWidth="162.0" vgap="10.0" GridPane.columnIndex="3">
        <columnConstraints>
          <ColumnConstraints hgrow="SOMETIMES" maxWidth="182.0" minWidth="10.0" prefWidth="150.0" />
        </columnConstraints>
        <rowConstraints>
          <RowConstraints maxHeight="88.0" minHeight="10.0" prefHeight="87.0" vgrow="SOMETIMES" />
          <RowConstraints maxHeight="45.0" minHeight="0.0" prefHeight="6.0" vgrow="SOMETIMES" />
          <RowConstraints maxHeight="78.0" minHeight="10.0" prefHeight="35.0" vgrow="SOMETIMES" />
        </rowConstraints>
         <children>
            <GridPane vgap="10.0">
              <columnConstraints>
                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
              </columnConstraints>
              <rowConstraints>
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
              </rowConstraints>
               <children>
                  <TitledPane alignment="BOTTOM_CENTER" animated="false" collapsible="false" text="Operationen:">
                     <content>
                        <ComboBox fx:id="auswahl" onAction="#berechnen" prefWidth="200.0" promptText="Auswahl" />
                     </content>
                     <GridPane.margin>
                        <Insets />
                     </GridPane.margin>
                  </TitledPane>
               </children>
            </GridPane>
            <GridPane prefHeight="35.0" prefWidth="105.0" GridPane.rowIndex="2">
              <columnConstraints>
                  <ColumnConstraints hgrow="SOMETIMES" maxWidth="105.0" minWidth="10.0" prefWidth="105.0" />
                <ColumnConstraints hgrow="SOMETIMES" maxWidth="124.0" minWidth="10.0" prefWidth="75.0" />
                <ColumnConstraints hgrow="SOMETIMES" maxWidth="72.0" minWidth="0.0" prefWidth="0.0" />
              </columnConstraints>
              <rowConstraints>
                <RowConstraints maxHeight="6.0" minHeight="0.0" prefHeight="3.0" vgrow="SOMETIMES" />
                <RowConstraints maxHeight="33.0" minHeight="10.0" prefHeight="33.0" vgrow="SOMETIMES" />
                <RowConstraints maxHeight="18.0" minHeight="2.0" prefHeight="2.0" vgrow="SOMETIMES" />
              </rowConstraints>
               <children>
                  <Button mnemonicParsing="false" onAction="#beendenKlick" prefHeight="25.0" prefWidth="74.0" text="Beenden" GridPane.columnIndex="1" GridPane.rowIndex="1" />
               </children>
            </GridPane>
         </children>
      </GridPane>
   </children>
</GridPane>
 
K

kneitzel

Gast
Also erst einmal danke für die Zusendung des Codes.

Mit Deinem Code kann ich aber den Fehler, dass Meldungen doppelt kommen, nicht nachvollziehen. Eine Fehlermeldung kommt genau einmal bei mir und wird dann auch nur einmal weggeklickt.

Was etwas auffällt: Was willst Du mit Drag & Drop machen? Das hat da im fxml nichts zu suchen:
onDragDetected="#auswahlNeu"

Das, was auffällt: Wenn Du einen ungültigen Wert eingibst und einen Wert, der mehr wie 10 Stellen hat, dann bekommst Du zwei Meldungen. Aber das liegt einfach an dem Aufbau Deiner berechnen Methode.

Generell sollte eine Methode drei Bereiche haben:
a) Validierung der Eingabe
b) Aktion ausführen
c) Rückgabe durchführen

Dabei kann es sich etwas vermischen, aber das ist der grobe Aufbau.

Bei der Validierung ist wichtig: Wenn eine Validierung fehlschlägt, dann bricht die Verarbeitung ab!

Also gehört die Prüfung der Stellen kaum ans Ende der Methode sondern an den Anfang! Und danach brichst Du die Verarbeitung ab (return fehlt!)
Dann kannst Du die Eingaben in Zahlen umwandeln. Fehler -> Abbruch!

Dann erfolgt erst die Berechnung.

Also prinzipiell hast Du soweit alles korrekt. Der Aufbau ist noch nicht 100% stimmig von der Reihenfolge und Du hast ein Event mit drin, das keinen Sinn zu machen scheint. Aber sonst ist alles zusammen (Was Du auch gut sehen kannst: Wenn Zahlen zu lang sind, dann berechnet er es trotzdem noch. Kann man erkennen, wenn Du die Fehlermeldung verschiebst :) )
 

killermuck

Mitglied
Habe jetzt die Prüfung für mehr als 10 Stellen nach oben verschoben den return eingefügt und den onDragDetected="#auswahlNeu" in der FXML-Datei gelöscht.
Jetzt werden die Fehlermeldungen jeweils nur einmal ausgeworfen.

Vielen Dank, da wäre ich momentan noch nicht drauf gekommen und das mit dem onDragDetected hätte ich auch nicht rausbekommen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Exelsior JavaFX Taschenrechner mit FX AWT, Swing, JavaFX & SWT 6
melaniemueller Taschenrechner JavaFX AWT, Swing, JavaFX & SWT 4
N JavaFX Einfacher Taschenrechner mit Scene Builder und Java FX AWT, Swing, JavaFX & SWT 0
thor_norsk Taschenrechner AWT, Swing, JavaFX & SWT 8
melaniemueller JavaFX Taschenrechner mit SceneBuilder AWT, Swing, JavaFX & SWT 12
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
N Swing Taschenrechner GUI AWT, Swing, JavaFX & SWT 13
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
O JavaFX mini Taschenrechner! AWT, Swing, JavaFX & SWT 35
N Taschenrechner mit mehreren Rechnungen AWT, Swing, JavaFX & SWT 18
A JavaFX Sehr viele Exceptions bei Taschenrechner mit JavaFx AWT, Swing, JavaFX & SWT 2
K Taschenrechner mit GUI AWT, Swing, JavaFX & SWT 2
L Event Handling Gui für Taschenrechner AWT, Swing, JavaFX & SWT 27
H Swing Taschenrechner GUI AWT, Swing, JavaFX & SWT 5
M Taschenrechner AWT, Swing, JavaFX & SWT 21
T Swing Taschenrechner AWT, Swing, JavaFX & SWT 2
M AWT Java-Taschenrechner, wie Stack richtig verwenden? AWT, Swing, JavaFX & SWT 14
C Grafik Taschenrechner AWT, Swing, JavaFX & SWT 5
H Taschenrechner Coding Erklärung AWT, Swing, JavaFX & SWT 2
Jats Hilfe bei FocusListener für Taschenrechner AWT, Swing, JavaFX & SWT 4
B Taschenrechner mit ComboBox AWT, Swing, JavaFX & SWT 7
S AWT Probleme mit Taschenrechner AWT, Swing, JavaFX & SWT 9
V Bitte um Hilfe bei nem Taschenrechner AWT, Swing, JavaFX & SWT 8
C Taschenrechner in Java AWT, Swing, JavaFX & SWT 7
M MouseEvent JButton Taschenrechner AWT, Swing, JavaFX & SWT 5
K Java-Taschenrechner AWT, Swing, JavaFX & SWT 1
L Taschenrechner mit Klammern AWT, Swing, JavaFX & SWT 11
H Taschenrechner AWT, Swing, JavaFX & SWT 5
G Taschenrechner-Problem AWT, Swing, JavaFX & SWT 2
Juelin Eingabensteuerung mit Textfield AWT, Swing, JavaFX & SWT 20
J Eingaben aus Textfield & ComboBox speichern und in ComboBox wieder ausgeben AWT, Swing, JavaFX & SWT 3
Z textField.getText = null AWT, Swing, JavaFX & SWT 15
officialmaxl JavaFX Textfield getTextfield() in String speichern AWT, Swing, JavaFX & SWT 1
L Swing Wert vom Textfield in Array List hinzufügen AWT, Swing, JavaFX & SWT 2
R Textfield lässt sich nicht positionieren AWT, Swing, JavaFX & SWT 1
B JavaFX ListView in Kombination mit TextField AWT, Swing, JavaFX & SWT 5
B JavaFX TextField Eingabe in neues Fenster übernehmen AWT, Swing, JavaFX & SWT 4
L JavaFX Ich suche das passende Textfield Event AWT, Swing, JavaFX & SWT 1
Bluedaishi JavaFX JFoenix TextField KeyEvent AWT, Swing, JavaFX & SWT 2
F JavaFX Aktuelle Zeit in einem TextField anzeigen AWT, Swing, JavaFX & SWT 7
F JavaFX textField Ausgabe automatisch kopieren AWT, Swing, JavaFX & SWT 7
M JavaFX String aus TextField reagiert nicht wie erwartet AWT, Swing, JavaFX & SWT 3
S JavaFX TextField auf Datentyp prüfen AWT, Swing, JavaFX & SWT 1
M JavaFX .setCellFactory () mit TextField AWT, Swing, JavaFX & SWT 4
L TextField Listener AWT, Swing, JavaFX & SWT 13
L TextField Eingabe in andere GUI übernehmen AWT, Swing, JavaFX & SWT 1
C JavaFX mit .setText() befülltes Textfield liefert anschließend mit .getText() den ursprünglichen Wert? AWT, Swing, JavaFX & SWT 1
K JavaFX Combobox, Textfield & setOnMouseClicked AWT, Swing, JavaFX & SWT 2
U Java FX Warten auf Textfield eingabe AWT, Swing, JavaFX & SWT 17
G JavaFX - Während AudioRecording keine Text eingabe TextField möglich AWT, Swing, JavaFX & SWT 6
S Buttons und TextField automatisch vergrößern AWT, Swing, JavaFX & SWT 8
Y Listview Textfield vergrößern, Schrift anpassen AWT, Swing, JavaFX & SWT 0
S AWT Daten über TextField und Button in array speichern AWT, Swing, JavaFX & SWT 5
U Eingabe von TextField in variable speichern AWT, Swing, JavaFX & SWT 2
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
I JavaFX TextField auf Eingabe prüfen AWT, Swing, JavaFX & SWT 3
D JavaFX Nur Zahlen in Textfield AWT, Swing, JavaFX & SWT 4
D Textfield bei starten füllen. AWT, Swing, JavaFX & SWT 5
H Textfield bleibt im Hintergrund AWT, Swing, JavaFX & SWT 2
C JavaFX Zugriff auf TextField aus einer anderen Klasse AWT, Swing, JavaFX & SWT 4
P LayoutManager TextField.setSize(); in einem FlowLayout AWT, Swing, JavaFX & SWT 3
T Internes Event-handling in TextField/JTextField AWT, Swing, JavaFX & SWT 2
O Swing Text aus Textfield auslesen AWT, Swing, JavaFX & SWT 8
1 Textfield: jede Buchstabe ein Bild AWT, Swing, JavaFX & SWT 2
U Swing NullPointerException trotz Referenz auf Textfield & Button AWT, Swing, JavaFX & SWT 6
S LayoutManager TextField verschwindet / wird klein AWT, Swing, JavaFX & SWT 4
S Button in Textfield ziehen AWT, Swing, JavaFX & SWT 4
T Einen Variablen Wert in einem TextField AWT, Swing, JavaFX & SWT 4
K Viele Textfield mit Hilfe eines MousListener leeren - möglich? AWT, Swing, JavaFX & SWT 8
F Swing TextField Eingabe in Variable umwandeln um zum Beispiel zu rechnen. AWT, Swing, JavaFX & SWT 3
G JavaFX TextField Eingabe formatieren/einschränken AWT, Swing, JavaFX & SWT 2
C Integer in ein Textfield schreiben. AWT, Swing, JavaFX & SWT 4
P TextField beim klicken von JButton speichern AWT, Swing, JavaFX & SWT 17
C Swing TextField auslesen AWT, Swing, JavaFX & SWT 21
MiMa Integer Zahl in Textfield ausgeben AWT, Swing, JavaFX & SWT 12
K Per Textfield Methode ausführen AWT, Swing, JavaFX & SWT 6
B JComboBox ans Textfield gelangen AWT, Swing, JavaFX & SWT 4
A Größe von Textfield bestimmen AWT, Swing, JavaFX & SWT 9
S JButton und textfield.setText - Komponenten über-/verdecken sich AWT, Swing, JavaFX & SWT 15
T jPanels im jFrame bewegen - Auch ohne Textfield? AWT, Swing, JavaFX & SWT 4
B AWT Mit TextField Zahlen einlesen lassen AWT, Swing, JavaFX & SWT 34
R Textfield auslesen auf Anforderung AWT, Swing, JavaFX & SWT 4
A Button und Textfield AWT, Swing, JavaFX & SWT 4
A TextField und Label AWT, Swing, JavaFX & SWT 8
H gui textfield AWT, Swing, JavaFX & SWT 5
A TextField: Textfeld teilweise editierbar AWT, Swing, JavaFX & SWT 2
R TextField auslesen & in Objekteigenschaften speichern AWT, Swing, JavaFX & SWT 22
E Button in TextField eibetten? AWT, Swing, JavaFX & SWT 4
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
W textfield zentriert AWT, Swing, JavaFX & SWT 2
N Swing Textfield listener AWT, Swing, JavaFX & SWT 2
H Zeich in einem TextField farblich markieren?! AWT, Swing, JavaFX & SWT 5
D Swing [BoxLayout] Nur TextArea und nicht TextField vergroessen AWT, Swing, JavaFX & SWT 2
D Textfield auswerten AWT, Swing, JavaFX & SWT 4
M Swing InputVerifer auf TextField AWT, Swing, JavaFX & SWT 14
B setText() auf TextField mit Document AWT, Swing, JavaFX & SWT 2
G Problem mit Textfield AWT, Swing, JavaFX & SWT 2
G Den Inhalt von einem Textfield aktualisieren AWT, Swing, JavaFX & SWT 6
D Inhalt von Textfield nach ComboBox AWT, Swing, JavaFX & SWT 2
E Swing Button ActionListener Infos aus Textfield und ComboBox AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben