Multiplikation von zwei Labels

Schnörz

Mitglied
Hallo zusammen

Ich habe in einem Gridpane zwei Labels die man über einen Button, in einem neuen Fenster editieren kann. Anzahl des Lebensmittel und Kalorien pro Stück. Jetzt möchte ich im Gridpane noch eine Zeile hinzufügen, die diese beiden Werte jeweils multipliziert, zu einem Total Kalorien. Ich habe von Code her keine Ahnung wie ich das bewerkstelligen kann. fixid vergeben usw. ist klar. Kann mir jemand helfen?
P.S. ich nutze Eclipse und Scene Builder in Windows.

Danke und viele Grüsse
 

JensXF

Mitglied
So sollte es klappen...
Java:
int x = Integer.parseInt(lblAnzahlLebensmittel.getText());
int y = Integer.parseInt(lblKalorienProStueck.getText());
        
lblTotalKalorien.setText(String.valueOf(x*y));
 
K

kneitzel

Gast
Hier wäre mein Tipp: Versuche Logik von UI mehr zu trennen. Es sollte also eine Datenstruktur mit den Werten geben. Das wäre dann dein Model.

In dem Model hast Du dann also sowas in der Art:
Java:
public class Model {
    private int x;
    private int y;
    
    // Getter und Setter noch ...
    // Konstruktoren, so wie Du diese ggf. benötigst ...
}

Und Deine View greift dann auf das Model zu:
-> Wenn x oder y geändert werden, dann wird das im Model geändert.
-> Und zur Anzeige: Hier werden die Werte aus dem Model genommen.

Bei So Frameworks wie Swing, die kein Binding kennen, baue ich dann oft einfach zwei Methoden:
- Daten aus Controls in Model kopieren
- Daten aus Model in Controls kopieren

Wenn also ein Event ausgelöst wird, dann wird einfach vorgegangen:
- Daten aus Controls in Model übernehmen
- mit dem Model etwas machen
- Daten dann aus Model in Controls übernehmen

Das ist so eine relativ einfache Aufgliederung.

Wenn das Model ständig geändert werden kann, dann wird das natürlich deutlich komplexer und führt dann dazu, dass man Teile des Bindings mehr und mehr nachbaut. Model bekommt dann ein Observer-Pattern und man hat dann ggf. Methoden, die ein Model-Feld mit einem Control verbinden (Also eine Art "Binding für Arme"). Aber das würde ich immer nur bei Notwendigkeit bauen. Und da gibt es evtl. auch fertige Libs für.
 

Schnörz

Mitglied
Also ich habe es schon mit einem Ähnliche Code wie JensXF gepostet hat probiert.
Erhalte aber immer folgende Meldung:

Cannot invoke getText() on the primitive type int

Das heisst die angeforderten Daten sind bereits int und nicht text? Darum kann er sie als Textanforderung nicht erkennen?
 
K

kneitzel

Gast
Ja, Du hast also schon auf eine int Variable zugegriffen und somit hast Du vermutlich schon etwas ähnliches wie ich gesagt habe. Das ist aber ohne konkreten Code nicht zu sagen.
 

Schnörz

Mitglied
Ja, Du hast also schon auf eine int Variable zugegriffen und somit hast Du vermutlich schon etwas ähnliches wie ich gesagt habe. Das ist aber ohne konkreten Code nicht zu sagen.
Ich poste mal das Lebensmittel Model und den Lebensmittel Controller

Model:
Java:
package rb.notvorrat.model;

import java.time.LocalDate;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import rb.notvorrat.util.LocalDateAdapter;

/**
 * Model class for Lebensmittel.
 *
 * @author Robert Brüllmann
 */
public class Lebensmittel {

    private final StringProperty name;
    private final StringProperty beschreibung;
    private final SimpleIntegerProperty anzahlEW;
    private final SimpleIntegerProperty anzahlKI;
    private final ObjectProperty<LocalDate> ablaufdatum;
    private final IntegerProperty anzahl;
    private final IntegerProperty kalorien;
    private final IntegerProperty preisinCHF;


    /**
     * Default constructor.
     */
    public Lebensmittel() {
        this(null, null);
    }
    
    /**
     * Constructor with some initial data.
     * 
     * @param name
     * @param beschreibung
     */
    public Lebensmittel(String name, String beschreibung) {
        this.name = new SimpleStringProperty(name);
        this.beschreibung = new SimpleStringProperty(beschreibung);
        
        // Some initial dummy data, just for convenient testing.
        this.ablaufdatum = new SimpleObjectProperty<LocalDate>(LocalDate.of(2025, 1, 01));
        this.anzahl = new SimpleIntegerProperty(4);
        this.kalorien = new SimpleIntegerProperty(300);
        this.preisinCHF = new SimpleIntegerProperty(5);
        this.anzahlEW = new SimpleIntegerProperty(1);
        this.anzahlKI = new SimpleIntegerProperty(1);
        

    }
    
    public String getname() {
        return name.get();
    }

    public void setname(String name) {
        this.name.set(name);
    }
    
    public StringProperty nameProperty() {
        return name;
    }

    public String getbeschreibung() {
        return beschreibung.get();
    }

    public void beschreibung(String beschreibung) {
        this.beschreibung.set(beschreibung);
    }
    
    public StringProperty beschreibungProperty() {
        return beschreibung;
    }

    public int getanzahl() {
        return anzahl.get();
    }

    public void setanzahl(int anzahl) {
        this.anzahl.set(anzahl);
    }
    
    public IntegerProperty anzahlProperty() {
        return anzahl;
    }

    @XmlJavaTypeAdapter(LocalDateAdapter.class)
    public LocalDate getablaufdatum() {
        return ablaufdatum.get();
    }

    public void setablaufdatum(LocalDate ablaufdatum) {
        this.ablaufdatum.set(ablaufdatum);
    }
    
    public ObjectProperty<LocalDate> ablaufdatumProperty() {
        return ablaufdatum;
    }
    
    public int getkalorien() {
        return kalorien.get();
    }

    public void setkalorien(int kalorien) {
        this.kalorien.set(kalorien);
    }
    
    public IntegerProperty kalorienProperty() {
        return kalorien;
    }
    
    
    public int getpreisinCHF() {
        return preisinCHF.get();
    }

    public void setpreisinCHF(int preisinCHF) {
        this.preisinCHF.set(preisinCHF);
    }
    
    public IntegerProperty preisinCHFProperty() {
        return preisinCHF;
    }
    
    public int getanzahlEW() {
        return anzahlEW.get();
    }

    public void setanzahlEW(int anzahlEW) {
        this.anzahlEW.set(anzahlEW);
    }
    
    public SimpleIntegerProperty anzahlEWProperty() {
        return anzahlEW;
    }
    
    public int getanzahlKI() {
        return anzahlKI.get();
    }

    public void setanzahlKI(int anzahlKI) {
        this.anzahlKI.set(anzahlKI);
    }
    
    public SimpleIntegerProperty anzahlKIProperty() {
        return anzahlKI;
    }
    
}


Controller:
Java:
package rb.notvorrat.view;


import javafx.fxml.FXML;

import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import rb.notvorrat.Main;
import rb.notvorrat.model.Lebensmittel;
import rb.notvorrat.util.DateUtil;



import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;

public class LebensmittelOverviewController {
    //Observable List for ChoiceBox
    ObservableList<String> AnzahlEWKI = FXCollections.observableArrayList("0","1","2","3","4","5","6","7","8","9","10");
    
    @FXML
    private TableView<Lebensmittel> lebensmittelTable;
    @FXML
    private TableColumn<Lebensmittel, String> nameColumn;
    @FXML
    private TableColumn<Lebensmittel, String> beschreibungColumn;

    @FXML
    private Label nameLabel;
    @FXML
    private Label beschreibungLabel;
    @FXML
    private Label anzahlLabel;
    @FXML
    private Label ablaufdatumLabel;
    @FXML
    private Label kalorienLabel;
    @FXML
    private Label totalkalorien;
    @FXML
    private Button berechnen;
    @FXML
    private Label preisinCHFLabel;
    @FXML
    private ChoiceBox anzahlEW;
    @FXML
    private ChoiceBox anzahlKI;


    // Reference to the main application.
    private Main main;

    /**
     * The constructor.
     * The constructor is called before the initialize() method.
     */
    public LebensmittelOverviewController() {
    }

    /**
     * Initializes the controller class. This method is automatically called
     * after the fxml file has been loaded.
     */
    @FXML
    private void initialize() {
        // Initialize the person table with the two columns.
        nameColumn.setCellValueFactory(
                cellData -> cellData.getValue().nameProperty());
        beschreibungColumn.setCellValueFactory(
                cellData -> cellData.getValue().beschreibungProperty());
        anzahlEW.setItems(AnzahlEWKI);
        anzahlKI.setItems(AnzahlEWKI);
        
        
        // Clear person details.
        showLebensmittelDetails(null);

        // Listen for selection changes and show the person details when changed.
        lebensmittelTable.getSelectionModel().selectedItemProperty().addListener(
                (observable, oldValue, newValue) -> showLebensmittelDetails(newValue));
    }

    /**
     * Is called by the main application to give a reference back to itself.
     * 
     * @param main
     */
    public void setMain(Main main) {
        this.main = main;
        
     // Add observable list data to the table
        lebensmittelTable.setItems(main.getLebensmittelData());
        
    }
        /**
         * Fills all text fields to show details about the person.
         * If the specified person is null, all text fields are cleared.
         * 
         * @param person the person or null
         */
        public void showLebensmittelDetails(Lebensmittel lebensmittel) {
            if (lebensmittel != null) {
                // Fill the labels with info from the person object.
                nameLabel.setText(lebensmittel.getname());
                beschreibungLabel.setText(lebensmittel.getbeschreibung());
                anzahlLabel.setText(Integer.toString(lebensmittel.getanzahl()));
                kalorienLabel.setText(Integer.toString(lebensmittel.getkalorien()));
                preisinCHFLabel.setText(Integer.toString(lebensmittel.getpreisinCHF()));

                // birthdayLabel.setText(...);
                ablaufdatumLabel.setText(DateUtil.format(lebensmittel.getablaufdatum()));
            } else {
                // Person is null, remove all the text.
                nameLabel.setText("");
                beschreibungLabel.setText("");
                ablaufdatumLabel.setText("");
                anzahlLabel.setText("");
                kalorienLabel.setText("");
                preisinCHFLabel.setText("");
            }
            }
            
        /**
         * Called when the user clicks on the delete button.
         */
        @FXML
        public void handleDeleteLebensmittel() {
            int selectedIndex = lebensmittelTable.getSelectionModel().getSelectedIndex();
            if (selectedIndex >= 0) {
                lebensmittelTable.getItems().remove(selectedIndex);
            } else {
                // Nothing selected.
                Alert alert = new Alert(AlertType.WARNING);
                alert.initOwner(main.getPrimaryStage());
                alert.setTitle("No Selection");
                alert.setHeaderText("No Lebensmittel Selected");
                alert.setContentText("Please select a Lebensmittel in the table.");

                alert.showAndWait();
            }
        }
        
        
        /**
         * Called when the user clicks the new button. Opens a dialog to edit
         * details for a new person.
         */
        @FXML
        private void handleNewLebensmittel() {
            Lebensmittel tempLebensmittel = new Lebensmittel();
            boolean okClicked = main.showLebensmittelEditDialog(tempLebensmittel);
            if (okClicked) {
                main.getLebensmittelData().add(tempLebensmittel);
            }
        }

        /**
         * Called when the user clicks the edit button. Opens a dialog to edit
         * details for the selected person.
         */
        @FXML
        private void handleEditLebensmittel() {
            Lebensmittel selectedLebensmittel = lebensmittelTable.getSelectionModel().getSelectedItem();
            if (selectedLebensmittel != null) {
                boolean okClicked = main.showLebensmittelEditDialog(selectedLebensmittel);
                if (okClicked) {
                    showLebensmittelDetails(selectedLebensmittel);
                }

            } else {
                // Nothing selected.
                Alert alert = new Alert(AlertType.WARNING);
                alert.initOwner(main.getPrimaryStage());
                alert.setTitle("No Selection");
                alert.setHeaderText("No Lebensmittel Selected");
                alert.setContentText("Please select a person in the table.");

                alert.showAndWait();
            }
        }

}
 
K

kneitzel

Gast
Ach, JavaFX ... da hast Du ja schon ein Binding. Binde die Label doch an die jeweilige Property. (Da es eine IntegerProperty ist, musst Du da bind(intProperty.asString()) machen so ich mich richtig erinnere.

Dann kannst Du im Model die Berechnung machen: Wenn sich eine der beiden IntegerProperties ändert, dann änderst Du im Model die andere Property (Sprich für das Ergebnis fügst Du noch eine Property hinzu damit Du da Binding machen kannst.). Dabei auf viele checks achten. Sollte eine Property null sein oder keinen gültigen Wert hat, dann machst Du keine Berechnung und so.

Wäre das eine Idee für Dich?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
F Matrix Multiplikation Java Basics - Anfänger-Themen 3
G Java Bruchrechner Addition, Multiplikation... Java Basics - Anfänger-Themen 12
Z Matrix Klasse mit Mehrdimensionalen Array (Addition, Multiplikation, to String) Java Basics - Anfänger-Themen 57
O Erstes Programm: Matrizen Multiplikation Java Basics - Anfänger-Themen 10
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
D Methoden Matrix Multiplikation Java Basics - Anfänger-Themen 27
J Funktionsaufrufe Multiplikation von Arrays Java Basics - Anfänger-Themen 3
Joker4632 Klassen BigDecimal Multiplikation liefert nicht erwarteten Wert Java Basics - Anfänger-Themen 6
TomatenBrot447 Adapter für eine optimierte Multiplikation Java Basics - Anfänger-Themen 5
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
K Multiplikation zweier Matrizen Java Basics - Anfänger-Themen 23
P Variablen Negatives Ergebnis bei Multiplikation von großen Zahlen Java Basics - Anfänger-Themen 2
R Matrix-Vektor-Multiplikation Java Basics - Anfänger-Themen 13
K Seltsames Ergebnis in Netbeans bei einfacher Multiplikation Java Basics - Anfänger-Themen 5
T Operatoren Multiplikation nur mit Addition, Subtraktion und Vergleich Java Basics - Anfänger-Themen 29
S Multiplikation durch Addition, Subtraktion und Vergleich von Zahlen Java Basics - Anfänger-Themen 14
V Vor jeder Multiplikation den linken Multiplikator abrunden Java Basics - Anfänger-Themen 4
M Matrix Matrix Multiplikation Java Basics - Anfänger-Themen 6
W Multiplikation mit rekursivem Aufruf Java Basics - Anfänger-Themen 17
S Multiplikation von großen Zahlen, ohne BigInt uä Java Basics - Anfänger-Themen 7
F.S.WhiTeY Multiplikation nach der Schulmethode Java Basics - Anfänger-Themen 6
K Matrizen Multiplikation Java Basics - Anfänger-Themen 3
B Multiplikation bei Generics Java Basics - Anfänger-Themen 9
G Multiplikation falsches Ergebnis Java Basics - Anfänger-Themen 5
K double Multiplikation Java Basics - Anfänger-Themen 2
K einfache Multiplikation Java Basics - Anfänger-Themen 6
2 Variablenüberlauf bei Addition, Multiplikation Java Basics - Anfänger-Themen 2
O Überlauf durch Multiplikation Java Basics - Anfänger-Themen 7
Torschti Eingabe von Dezimalzahlen (bis zu zwei Kommastellen) Java Basics - Anfänger-Themen 11
A 1 Leerzeichen durch zwei Leerzeichen ersetzen Java Basics - Anfänger-Themen 4
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
sasnitzer java augensumme von zwei würfeln ist 1 Java Basics - Anfänger-Themen 8
krgewb Double mit zwei Nachkommastellen Java Basics - Anfänger-Themen 2
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
D Größtes Palindrom Produkt aus zwei dreistelligen Zahlen Java Basics - Anfänger-Themen 60
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
B Erste Schritte Bisektion mit zwei Funktionen? Java Basics - Anfänger-Themen 1
G zwei Instanzen einer Klasse Java Basics - Anfänger-Themen 29
A Java-XSSFBook: zwei Sheets mergen Java Basics - Anfänger-Themen 5
C Zwei Arrays addieren und ausgeben Java Basics - Anfänger-Themen 3
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
K mit <<1 kann man mal 2 machen, mit >>2 geteilt durch zwei und was bewirkt <<<1 und >>>1? Java Basics - Anfänger-Themen 5
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
M Wie kann ich ein Array in zwei Hälften aufteilen? Java Basics - Anfänger-Themen 12
S Längster Pfad zwischen zwei Vertices in einem Graph Java Basics - Anfänger-Themen 3
S Aktuell beste Methode um zwei Bilder zu vergleichen..? Java Basics - Anfänger-Themen 1
A Zwei XML-Dateien Mergen Java Basics - Anfänger-Themen 14
U Erste Schritte nextGaussian zwischen zwei Werten Java Basics - Anfänger-Themen 19
U zwei 2D arrays auf gleich sein überprüfen Java Basics - Anfänger-Themen 14
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
Düsseldorf2002 Datentypen Zwei dimensionale LinkedList Java Basics - Anfänger-Themen 8
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
J Zwei Objekte vergleichen Java Basics - Anfänger-Themen 8
X Zwei Dimensionales Array prüfen Java Basics - Anfänger-Themen 1
G Methoden Informationen aus zwei Objekte bekommen? Java Basics - Anfänger-Themen 6
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
Q Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge? Java Basics - Anfänger-Themen 10
pkm Regexproblem - Wie kann ich zwei oder mehr beliebige Zeichen matchen? Java Basics - Anfänger-Themen 7
A Wieso bekomme ich hier zwei unterschiedliche Ausgaben? Java Basics - Anfänger-Themen 6
H Ein gegebenes Int Array zu Zwei Arrays zurück geben Java Basics - Anfänger-Themen 6
J zwei String Arrays miteinander vergleichen Java Basics - Anfänger-Themen 18
R Methode zwei Sortierkriterien der Klasse Comparator übergeben Java Basics - Anfänger-Themen 4
B Collections.sort mit zwei Bedingungen? Java Basics - Anfänger-Themen 4
X Textdatei: zwei-zeilenweise gleiche Zeilen rausschmeißen Java Basics - Anfänger-Themen 21
M Konkatenation von zwei Strings Java Basics - Anfänger-Themen 6
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
D Input/Output Input von zwei Koordinaten validieren und anschließend Werte speichern Java Basics - Anfänger-Themen 7
L Zwei sortierte Subarrays mit gleicher Länge zusammenfügen Java Basics - Anfänger-Themen 2
F Zwei Dimensionles Array Java Basics - Anfänger-Themen 21
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
J Inhalte von zwei Arrays vertauschen?! Java Basics - Anfänger-Themen 6
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
A Wie zwei zahlen in einer Variable speichern? Java Basics - Anfänger-Themen 7
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
B Relativen Anteil von zwei Datümer auf Monatsebene umrechnen Java Basics - Anfänger-Themen 130
W Zwei Programme sollen auf eine Klasse zugreifen Java Basics - Anfänger-Themen 18
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
B Anzahl von Stunden / Tage von zwei Datumswerten ermitteln Java Basics - Anfänger-Themen 1
L Erste Schritte Elemente zwei Schlangen vergleichen Java Basics - Anfänger-Themen 14
N Zwei Strings mit "==" vergleichen warum TRUE Java Basics - Anfänger-Themen 2
D Input/Output InputDialog mit zwei Inputfeldern? Java Basics - Anfänger-Themen 4
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
S Daten aus zwei Verschiedenen Tabellen in eine ArrayListe Java Basics - Anfänger-Themen 4
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
J Logging erzeugt zwei dateien.... Java Basics - Anfänger-Themen 7
S zwei-dimensionales Array Java Basics - Anfänger-Themen 20
R Zwei Attribute gleichzeitig ausgeben Java Basics - Anfänger-Themen 12
javajoshi Problem mit zwei Threads und Arrays (Runnable) Java Basics - Anfänger-Themen 12
T Classpath Zwei gleiche Dateinamen in verschiedenen Projekten möglich? Java Basics - Anfänger-Themen 13
H Bubblesort-Zwei Integer auf Dekade vergleichen. Java Basics - Anfänger-Themen 6
M Wie erzeuge ich die Differenz von zwei Daten in Stunden?? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben