ActionEvent Press Enter per Code auslösen

SteffiBee

Mitglied
Hallo,

eine Frage, gibt es die Möglichkeit,
dass wenn ich ein TextField auf setOnAction setze, ich in
der handle() Methode das KeyEvent auslöse, dass für ein anderes TextField
per setOnAction gesetzt wurde?

Danke im Voraus.
 
K

kneitzel

Gast
Da wäre die erste Frage: Was spricht dagegen, den ActionHandler direkt aufzurufen? Bzw. die Funktionalität, die benötigt wird in eine Methode zu packen um dies dann in den Event Handlern aufzurufen?
 

SteffiBee

Mitglied
Alles befindet sich in zwei unterschiedlichen Klassen.
Java:
public void addPreisActions(TextField listenpreis, TextField ekPreis, TextField tfRabatt) {
        
        listenpreis.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {

                Double ek, rabatt, lp;

                if (ekPreis.getText().isEmpty() || listenpreis.getText().isEmpty()) {
                    tfRabatt.setText(null);
                    return;
                } else {
                    lp = Double.valueOf(listenpreis.getText().replace(",", "."));
                    ek = Double.valueOf(ekPreis.getText().replace(",", "."));
                    rabatt = Double.parseDouble(String.format(Locale.ENGLISH, "%1.2f", (ek / lp - 1) * (-1) * 100));
                    tfRabatt.setText(String.valueOf(rabatt));
                    
                    berechneKalkulatoren(); //---> diese Methode befindet sich in einer anderen Klasse
                }
            }
        });

Java:
public void berechneKalkulatoren() {

        ArrayList<Kalkulator> kalkulatoren = db.getKalkulatoren(tfArtikelnummer.getText());
        Double vkohne, vkmit, lp = Double.valueOf(tfListenpreis.getText().replace(",", ".")), rabatt;

        if (!kalkulatoren.isEmpty()) {

            if (kalkulatoren.get(0) != null) {
                rabatt = kalkulatoren.get(0).getRabatt();
                vkohne = lp * ((100 - rabatt) / 100);
                vkmit = vkohne + (vkohne * Double.valueOf(tfMWST.getText().replace(",", ".")) / 100);
                tfVKoM1.setText(String.valueOf(String.format(Locale.ENGLISH, "%1.2f", vkohne)));
                tfVKmM1.setText(String.valueOf(String.format(Locale.ENGLISH, "%1.2f", vkmit)));
            }

            if (kalkulatoren.get(1) != null) {
                rabatt = kalkulatoren.get(1).getRabatt();
                vkohne = lp * ((100 - rabatt) / 100);
                vkmit = vkohne + (vkohne * Double.valueOf(tfMWST.getText().replace(",", ".")) / 100);
                String vko = String.valueOf(String.format(Locale.ENGLISH, "%1.2f", vkohne));
                String vkm = String.valueOf(String.format(Locale.ENGLISH, "%1.2f", vkmit));
                tfVKoM2.setText(String.valueOf(vko));
                tfVKmM2.setText(String.valueOf(vkm));
            }

            if (kalkulatoren.get(2) != null) {
                rabatt = kalkulatoren.get(2).getRabatt();
                vkohne = lp * ((100 - rabatt) / 100);
                vkmit = vkohne + (vkohne * Double.valueOf(tfMWST.getText().replace(",", ".")) / 100);
                String vko = String.valueOf(String.format(Locale.ENGLISH, "%1.2f", vkohne));
                String vkm = String.valueOf(String.format(Locale.ENGLISH, "%1.2f", vkmit));
                tfVKoM3.setText(String.valueOf(vko));
                tfVKmM3.setText(String.valueOf(vkm));
            }

            if (kalkulatoren.get(3) != null) {
                rabatt = kalkulatoren.get(3).getRabatt();
                vkohne = lp * ((100 - rabatt) / 100);
                vkmit = vkohne + (vkohne * Double.valueOf(tfMWST.getText().replace(",", ".")) / 100);
                String vko = String.valueOf(String.format(Locale.ENGLISH, "%1.2f", vkohne));
                String vkm = String.valueOf(String.format(Locale.ENGLISH, "%1.2f", vkmit));
                tfVKoM4.setText(String.valueOf(vko));
                tfVKmM4.setText(String.valueOf(vkm));
            }

            if (kalkulatoren.get(4) != null) {
                rabatt = kalkulatoren.get(4).getRabatt();
                vkohne = lp * ((100 - rabatt) / 100);
                vkmit = vkohne + (vkohne * Double.valueOf(tfMWST.getText().replace(",", ".")) / 100);
                String vko = String.valueOf(String.format(Locale.ENGLISH, "%1.2f", vkohne));
                String vkm = String.valueOf(String.format(Locale.ENGLISH, "%1.2f", vkmit));
                tfVKoM5.setText(String.valueOf(vko));
                tfVKmM5.setText(String.valueOf(vkm));
            }
        }
    }
In dieser Methode sind weitere TextFelder, die müsste ich alle übergeben, wenn ich die Methode in die andere
Klasse packen würde.

Ich habe bereits TextFelder in der anderen Klasse, die diese Berechnungen ebenfalls ausführen, bzw per EventHandler anstoßen.
Wenn ich also das Event per Code ausführen könnte, könnte ich mir die Methode ganz sparen.
 
M

Mart

Gast
warum übergibst du nicht einfach die Werte bzw die Propertys die zum berechnen gebraucht werden?

das berechne Kaklulatoren muss immer funktionieren mit den Parametern die Übergeben werden da es ein Model ist ( gut Klassen Attribute gibts auch noch aber die Methode muss auch mit denene IMMER funktionieren )

lp = Double.valueOf(tfListenpreis.getText().replace(",", ".")),
das model sollte eig gar keine nodes überhaupt kennen bzw sehen, und ich nehme an dass da ein Textfeld übergeben wird
 
M

Mart

Gast
ich würde es mit einer Hashmap lösen die die Ergebnisse abspeichert und die Keys sind in einem enum ( damit man es lesbarer macht ) weil ich nicht raus lesen kann was die ifs überhaupt berechnen? deswegen auch die fragezeichen.. dann kannst du den ganzen code in den ifs raus ziehen das hab ich in einem anderen thread mal erklärt warum das geht ohne dass ich weis was du überhaupt machst falls es dich interessiert kann ich ihn suchen
Java:
public enum Preis
{
    RABATT,VERKAUF_MIT, VERKAUF_OHNE;
}
Java:
    HashMap<Preis, Double > berechneKalkulatoren( ... parameter ...){
        HashMap<Preis, Double> ergebnisPreise = new HashMap<>();
        ...
        if( db.Kalkulatoren != empty) {
            if ( ... )
            {
                berechneRabatt??();
                ergebnisPreise.put(Preis.RABATT, ergebnis);
            }
            if ( ... ) {
                Double ergebnis;
                berechneAndere??();
                ergebnisPreise.put(Preis.VERKAUF_MIT, ergebnis)
            }
            if ( ... ) {
                Double ergebnis;
                berechneAndere??();
                ergebnisPreise.put(Preis.VERKAUF_OHNE, ergebnis)
            }
        }

wenn du das hast

kannst du ( was ich in einem anderen thread gesagt hab ) die Box wo die ganzen sachen drin sind zb
HBox [
text1
text2
text3
]
dann setzt du die HBox den eventhandler box.onKeyPressed(Key.Enter model.berechneKalkulatoren() somit hast du die problematik gar nicht mehr dass du 3 eventhandler brauchst
 
K

kneitzel

Gast
Also irgend welche Referenzen wirst Du ja haben, denn sonst könntest Du auch kein Event auslösen.
Wenn Du nur das Control hast, dann kannst Du mittels getOnAction den Eventhandler bekommen.

Aber das macht keinen Sinn. Du willst Dich nicht abhängig machen von irgendwelchen Controls. Wenn Du da unterschiedliche Klassen mit unterschiedlichen Controls hast, dann st das eine Abhängigkeit die sehr heftig ist!

Evtl. willst Du einmal anschauen, wie man UIs strukturiert. Dazu gibt es das MVC Pattern oder noch besser: MVVM.
 

SteffiBee

Mitglied
Das Problem ist, dass der Sachverhalt schwer zu erklären ist.
Das ist ziemlich komplex.
Jeder einzelne Wert ist von einem anderen abhängig.
Sobald sich ein Wert ändert, egal in welchem Textfeld, müssen alle anderen angepasst werden.
 
M

Mart

Gast
Das Problem ist, dass der Sachverhalt schwer zu erklären ist.
ist es immer ;)
Das ist ziemlich komplex.
wenn dein Code nicht idioten sicher ist musst du ihn überarbeiten :D
Sobald sich ein Wert ändert, egal in welchem Textfeld, müssen alle anderen angepasst werden.
bindings ist da dein anlaufpunkt, nur du sagst immer nur bröckchen was es schwer macht
 
M

Mart

Gast
Java:
1. Lieferant Listenpreis Einkaufspreis Rabatt aktualisieren Datum aktualisiert
(ChoiceBox) (TextField) (TextField) (TextField) (Button) (TextField)
also ich stell jetzt mal annahmen
1. wenn du einen Lieferanten auswählst willst du auch die textfelder berechnen?
2. was tut der button?
3. willst du anzeigen lassen dass es was zum kaufen gibt oder willst du einträge erstellen also willst du sowas wie amazon amchen?
 

SteffiBee

Mitglied
Also irgend welche Referenzen wirst Du ja haben, denn sonst könntest Du auch kein Event auslösen.
Wenn Du nur das Control hast, dann kannst Du mittels getOnAction den Eventhandler bekommen.

Aber das macht keinen Sinn. Du willst Dich nicht abhängig machen von irgendwelchen Controls. Wenn Du da unterschiedliche Klassen mit unterschiedlichen Controls hast, dann st das eine Abhängigkeit die sehr heftig ist!

Evtl. willst Du einmal anschauen, wie man UIs strukturiert. Dazu gibt es das MVC Pattern oder noch besser: MVVM.
Habe schon versucht so gut es geht, alles zu trennen.
Ein Paket für das Datenbankmanagement. Eins für das Fachkonzept und eins für die GUI.
Als Anfänger merke ich aber meist erst später, dass ich zB. in der GUI zum Teil Dinge drin habe,
die eigentlich ins Fachkonzept gehören.
Bin dabei nach und nach umzustrukturieren, leider stoße ich da zum Teil an meine Grenzen und es funktioniert dann wieder nichts.
 
M

Mart

Gast
Habe schon versucht so gut es geht, alles zu trennen.
Ein Paket für das Datenbankmanagement. Eins für das Fachkonzept und eins für die GUI.
Als Anfänger merke ich aber meist erst später, dass ich zB. in der GUI zum Teil Dinge drin habe,
die eigentlich ins Fachkonzept gehören.
Bin dabei nach und nach umzustrukturieren, leider stoße ich da zum Teil an meine Grenzen und es funktioniert dann wieder nichts.
ist das ein studiums projekt oder privates projekt?
 

SteffiBee

Mitglied
Java:
1. Lieferant Listenpreis Einkaufspreis Rabatt aktualisieren Datum aktualisiert
(ChoiceBox) (TextField) (TextField) (TextField) (Button) (TextField)
also ich stell jetzt mal annahmen
1. wenn du einen Lieferanten auswählst willst du auch die textfelder berechnen?
2. was tut der button?
3. willst du anzeigen lassen dass es was zum kaufen gibt oder willst du einträge erstellen also willst du sowas wie amazon amchen?
Nein, wenn ich als Händler einen neuen Artikel anlege, gibt es für diesen Artikel unterschiedliche Lieferanten.
Jeder Lieferant hat sowohl unterschiedliche Listen- als auch Einkaufspreise. Aus diesen errechnet sich der Rabatt, den ich bei dem jeweiligen Lieferant bekomme. Die Preise bei den Lieferanten ändern sich monatlich, d. h. ich muss jedes Mal, wenn ich einen Artikel aufrufe überprüfen, ob die Preise diesen Monat schon aktualisiert wurden.
Habe ich die Preise für einen Artikel beim jeweiligen Lieferanten abgefragt und neu eingetragen, klicke ich den Button um das Datum auf das aktuelle Datum zu setzen und die aktualisierten Daten in die Datenbank zu schreiben.
 
M

Mart

Gast
ich geb dir mal abstracte standard klassen die dich fast dazu zwingen mvc umzusetzen
kannst sie benutzen oder auch nicht
Java:
public abstract class View<ROOT_PANE_TYPE extends Pane>
{
    protected ROOT_PANE_TYPE root;

    public final ROOT_PANE_TYPE getRootPane()
    {
        return root;
    }

    @Override
    public String toString()
    {
        return "\t\tView =>\n\t\t=> CLASS => " + this.getClass() + "\n\t\t=> ROOT_NODE => " + this.root;
    }
}
Java:
public abstract class Controller<VIEW_CLASS extends View<?>>
{
    protected VIEW_CLASS view;

    public VIEW_CLASS getView()
    {
        return view;
    }

    /**
     * @Override Should be called from other Controllers when The View and it's
     *           components shouldn't be visible
     */
    public final Pane getRootPane()
    {
        return view.getRootPane();
    }

    public String toString()
    {
        return "Controller =>" + "\n\t=> CLASS => " + this.getClass() + "\n\t=> VIEW_OBJECT =>\n" + view.toString()
                + "\n";
    }
}
wenn du sie nicht benutzt ist auch gut hab ich kein Problem damit :D
 
M

Mart

Gast
der controller ruft dann model methoden ab.. aber ob das model in jedem Controller existiiert oder irgendwo public rum liegt ist egal... hauptsache es ist nicht im controller
 
M

Mart

Gast
Ich wüsste gerade nicht mal, WIE ich die benutzen sollte, wir haben es komplett anders gelernt.
Schon mit abstracten Klassen, aber eben anders.
Trotzdem danke.
was habt ihr denn gelernt? und wie? bis jetzt ist in deinem Code
1. keinerlei pattern umsetzung ( unerheblich WAS für eins ihr habt ) zb @kneitzel ist für das mvvm pattern mit fxml und ich eher für klassisches mvc... es geht darum IRGENDWAS zu benutzen
2. ich hab in meinem Studium ein Projekt umgesetzt mit 17 mvc "pakete" und es hat jedesmal funktioinert mit den Klassen ... sie schreiben ja nicht wirklich viel vor ... es macht einfach die unterteilung leichter ...
3. da du selber nicht weiter weißt und nicht mehr zurecht kommst werfe ich einfach mal in den Raum dass entweder das vom lehrer oder das von dir nicht funktioniert ... aber da kann ich das zitat von Hans Söllner einbringen "Der Lehrer soll ihnen was beibringen aber die schüler wollen es nicht kapieren"

zb mein "Lehrer" mit doktor titel hat mit uns einen "Objekt orientierten" web browser gemacht... wir hatten dann eine main klasse mit der main.... und eine Browser klasse wo wir 1 Objekt davon erzeugt hatten... also im studium musst du auch mal selber nachdenken ob das so sinnvoll ist , in der normalen schule musst du einfach glauben und nicht widersprechen.. imstudium ist das anders :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JavaFX Verständnisfrage EventHandler<ActionEvent> Implementierung in meiner Klasse AWT, Swing, JavaFX & SWT 2
M JavaFX ActionEvent Button AWT, Swing, JavaFX & SWT 6
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
S JavaFX Unterschied MouseEvent und ActionEvent AWT, Swing, JavaFX & SWT 3
KilledByCheese Event Handling Vom ActionEvent auf String zugreifen - genaueres in der Beschreibung AWT, Swing, JavaFX & SWT 3
G Swing Durch GlassPane auf Button klicken und ActionEvent auslösen AWT, Swing, JavaFX & SWT 0
K Ereignisbehandlung, ActionListener, ActionEvent AWT, Swing, JavaFX & SWT 3
T Fehler bei ActionEvent? AWT, Swing, JavaFX & SWT 3
P ActionEvent wird nicht verarbeitet AWT, Swing, JavaFX & SWT 4
X AWT ActionEvent wirft NullPointerExpection Warum? AWT, Swing, JavaFX & SWT 42
P Event Handling Anfängerfrage: ActionEvent bekommt kein Zugriff auf Objekt AWT, Swing, JavaFX & SWT 3
J JavaFX ActionEvent AWT, Swing, JavaFX & SWT 8
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
M Swing ActionEvent soll von Anderem ActionEvent abhängen AWT, Swing, JavaFX & SWT 3
M JPopupMenu per Klick schließen und gleichzeitig ActionEvent auf JButton? AWT, Swing, JavaFX & SWT 15
1 ActionEvent generieren und an ActionListener weiterleiten AWT, Swing, JavaFX & SWT 12
L JFrame größe in einem ActionEvent ändern AWT, Swing, JavaFX & SWT 4
C Programm für 5 sekunden anhalten und actionevent abfangen AWT, Swing, JavaFX & SWT 18
M Arbeiten mit actionPerformed(ActionEvent) oder Alternative AWT, Swing, JavaFX & SWT 7
N Aufgabe: ActionEvent - Abfrage AWT, Swing, JavaFX & SWT 7
N Problem mit ActionEvent - Abfrage AWT, Swing, JavaFX & SWT 10
Dit_ Objekt mit ActionEvent übergeben AWT, Swing, JavaFX & SWT 2
B JFreeChart Balkendiagramm ActionEvent AWT, Swing, JavaFX & SWT 2
kirchrath Swing Aus ActionEvent Objekt herausfinden auf dem er ausgeführt wurde AWT, Swing, JavaFX & SWT 4
T JTable durch ActionEvent befüllen AWT, Swing, JavaFX & SWT 3
B ActionEvent Dateipfad als String übergeben AWT, Swing, JavaFX & SWT 11
M Frage zu ActionEvent? AWT, Swing, JavaFX & SWT 4
P KeyEvent methode an actionEvent methode weiterleiten AWT, Swing, JavaFX & SWT 5
M Eigenes ActionEvent / Eigener Listener AWT, Swing, JavaFX & SWT 2
G ActionEvent richtig anbringen AWT, Swing, JavaFX & SWT 7
C JButton-Name per ActionEvent rausfinden AWT, Swing, JavaFX & SWT 2
P actionlistener und actionevent AWT, Swing, JavaFX & SWT 2
M ActionEvent löst nicht aus AWT, Swing, JavaFX & SWT 4
T actionevent an modalen dialog AWT, Swing, JavaFX & SWT 5
L eigene Komponente, ActionEvent senden? AWT, Swing, JavaFX & SWT 3
M ActionEvent manuell senden AWT, Swing, JavaFX & SWT 7
S Neubaufbau eines Tabelleninhalts bei actionEvent AWT, Swing, JavaFX & SWT 4
I JTextfield senden über Enter AWT, Swing, JavaFX & SWT 1
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
J Tableview - kann man mit Enter die Zellen wechseln AWT, Swing, JavaFX & SWT 1
S JavaFX Tab durch Enter ersetzten AWT, Swing, JavaFX & SWT 3
X Javafx button per enter auslösen AWT, Swing, JavaFX & SWT 5
C JTextfield ohne Enter feuern AWT, Swing, JavaFX & SWT 8
C JOptionPane.showConfirmDialog() -> Focus auf NEIN -> Enter gibt YES_OPTION zurück AWT, Swing, JavaFX & SWT 6
T JOptionPane Enter = Okay AWT, Swing, JavaFX & SWT 3
R JButton durch Enter auslösen AWT, Swing, JavaFX & SWT 7
T JButton mit Enter bestätigen AWT, Swing, JavaFX & SWT 7
S Textarea und Enter AWT, Swing, JavaFX & SWT 5
J KeyListener um auf CTRL-Enter zu reagieren AWT, Swing, JavaFX & SWT 2
B JSpinner Enter AWT, Swing, JavaFX & SWT 7
D SWT JFace TableViewer nächster CellEditor nach Enter aktivieren AWT, Swing, JavaFX & SWT 5
E Jtable Werte ohne Enter übernehmen AWT, Swing, JavaFX & SWT 9
O JTable Zelle mit "ENTER" in Editmode setzen AWT, Swing, JavaFX & SWT 4
S Swing Auf Enter - Eingabe reagieren AWT, Swing, JavaFX & SWT 10
A JOptionPane soll auf Enter reagieren AWT, Swing, JavaFX & SWT 4
G Button auf Enter reagieren AWT, Swing, JavaFX & SWT 5
GilbertGrape bei "Enter" Funktion ausführen, egal wo der Fokus AWT, Swing, JavaFX & SWT 2
D Wie Taste "ENTER" bei PlainDocument abfangen? AWT, Swing, JavaFX & SWT 2
S Enter in JLabel - oder: JTabbedPane mit mehreren JLabel AWT, Swing, JavaFX & SWT 3
W JTabel darf nicht bei Enter AWT, Swing, JavaFX & SWT 2
D JButton mit Enter drücken AWT, Swing, JavaFX & SWT 5
D JButton mit Fokus soll auf ENTER reagieren AWT, Swing, JavaFX & SWT 3
ARadauer dialog, bei enter auf ok AWT, Swing, JavaFX & SWT 3
C ENTER-Frage AWT, Swing, JavaFX & SWT 28
S "Enter" in JTextField abfangen AWT, Swing, JavaFX & SWT 7
N jTextArea, Enter AWT, Swing, JavaFX & SWT 5
S TAB Taste ändern in Enter und deaktivieren im jTextField AWT, Swing, JavaFX & SWT 5
R JTable editierbar, Enter Event,... AWT, Swing, JavaFX & SWT 2
B JOptionDialog mit Enter Beenden? AWT, Swing, JavaFX & SWT 5
F JOptionPane soll nicht auf ENTER reagieren AWT, Swing, JavaFX & SWT 8
R Steuerzeichen eines Strings (z.B. ENTER) zurückwandeln AWT, Swing, JavaFX & SWT 3
bernd Text nach Betätigung der Enter-Taste übertragen AWT, Swing, JavaFX & SWT 8
K [JComboBox] ENTER löst zwei events aus? AWT, Swing, JavaFX & SWT 2
B button mit ENTER betätigen AWT, Swing, JavaFX & SWT 14
G JButton mit ENTER Taste klicken AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben