Hallo Zusammen,
ich versuche gerade einen Taschenrechner den ich in SWING erstellt habe in JavaFX zu adaptieren. Folgender maßen sieht der Controller hierzu aus:
[CODE lang="java" title="Controller"]package einsendeaufgabe1;
import java.awt.Button;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javafx.scene.control.Label;
public class FXMLControllerTaschenrechner {
//das Label Ergebnis
@FXML private Label ausgabe ;
//Die Eingabefelder als Textfield
@FXML private TextField eingabe1;
@FXML private TextField eingabe2;
//das Kombinationsfeld
@FXML private ComboBox<String> auswahl;
// Der beenden Button
@FXML private Button beenden;
//die Methode zum Beenden
@FXML protected void beendenKlick(ActionEvent event) {
Platform.exit();
}
@FXML private void berechnen() {
//ergebnis muss initialisiert werden
int zahl1, zahl2, ergebnis = 0;
boolean fehlerFlag = false;
if (eingabe1.getText().isEmpty()) {
zahl1 = 0;
eingabe1.setText("0");
}
else
zahl1 = Integer.parseInt(eingabe1.getText());
if (eingabe2.getText().isEmpty()) {
zahl2 = 0;
eingabe2.setText("0");
}
else
zahl2 = Integer.parseInt(eingabe2.getText());
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 zurück
if (fehlerFlag == false) {
//das Format anwenden, das Ergebnis ist eine Zeichenkette*/
ausgabe.setText(Integer.toString(ergebnis));
}
else
ausgabe.setText("Nicht def.");
}
//Die Methode wird nach den FXML Anweisungeen ausgeführt
@FXML void initialize() {
//Die einträge für die Kombinationsfelder setzen
auswahl.getItems().addAll("Addition","Subtraktion","Multiplikation","Division");
//den ersten Eintrag auswählen
auswahl.getSelectionModel().selectFirst();
}
}
[/CODE]
Allerdings wurde in SWING die Eingabe der Textfelder beschränkt und sobald ich Buchstaben eingegeben habe das Textfeld geleert
[CODE lang="java" title="Textfeldbeschränkung"]eingabe1 = new JFormattedTextField(new DecimalFormat("#"));[/CODE]
in der jetzigen Anwendung (siehe oben) würde die Eingabe von nicht Zahlen zu einer NumberFormatException führen.
Kann ich unter JavaFX die Eingabe des Textfeldes ebenfalls beschränken, und wenn ja wie? Oder muss ich die Exception mit einer Meldung abfangen? Bin Anfänger und daher über jeden Tipp dankbar
ich versuche gerade einen Taschenrechner den ich in SWING erstellt habe in JavaFX zu adaptieren. Folgender maßen sieht der Controller hierzu aus:
[CODE lang="java" title="Controller"]package einsendeaufgabe1;
import java.awt.Button;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javafx.scene.control.Label;
public class FXMLControllerTaschenrechner {
//das Label Ergebnis
@FXML private Label ausgabe ;
//Die Eingabefelder als Textfield
@FXML private TextField eingabe1;
@FXML private TextField eingabe2;
//das Kombinationsfeld
@FXML private ComboBox<String> auswahl;
// Der beenden Button
@FXML private Button beenden;
//die Methode zum Beenden
@FXML protected void beendenKlick(ActionEvent event) {
Platform.exit();
}
@FXML private void berechnen() {
//ergebnis muss initialisiert werden
int zahl1, zahl2, ergebnis = 0;
boolean fehlerFlag = false;
if (eingabe1.getText().isEmpty()) {
zahl1 = 0;
eingabe1.setText("0");
}
else
zahl1 = Integer.parseInt(eingabe1.getText());
if (eingabe2.getText().isEmpty()) {
zahl2 = 0;
eingabe2.setText("0");
}
else
zahl2 = Integer.parseInt(eingabe2.getText());
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 zurück
if (fehlerFlag == false) {
//das Format anwenden, das Ergebnis ist eine Zeichenkette*/
ausgabe.setText(Integer.toString(ergebnis));
}
else
ausgabe.setText("Nicht def.");
}
//Die Methode wird nach den FXML Anweisungeen ausgeführt
@FXML void initialize() {
//Die einträge für die Kombinationsfelder setzen
auswahl.getItems().addAll("Addition","Subtraktion","Multiplikation","Division");
//den ersten Eintrag auswählen
auswahl.getSelectionModel().selectFirst();
}
}
[/CODE]
Allerdings wurde in SWING die Eingabe der Textfelder beschränkt und sobald ich Buchstaben eingegeben habe das Textfeld geleert
[CODE lang="java" title="Textfeldbeschränkung"]eingabe1 = new JFormattedTextField(new DecimalFormat("#"));[/CODE]
in der jetzigen Anwendung (siehe oben) würde die Eingabe von nicht Zahlen zu einer NumberFormatException führen.
Kann ich unter JavaFX die Eingabe des Textfeldes ebenfalls beschränken, und wenn ja wie? Oder muss ich die Exception mit einer Meldung abfangen? Bin Anfänger und daher über jeden Tipp dankbar