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
}
}
});
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));
}
}
}
das model sollte eig gar keine nodes überhaupt kennen bzw sehen, und ich nehme an dass da ein Textfeld übergeben wirdlp = Double.valueOf(tfListenpreis.getText().replace(",", ".")),
public enum Preis
{
RABATT,VERKAUF_MIT, VERKAUF_OHNE;
}
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)
}
}
Um die Methode aus der anderen Klasse aufzurufen brauchst du natürlich die Instanz der Klasse in der die Methode ist.berechneKalkulatoren(); //---> diese Methode befindet sich in einer anderen Klasse
oder MVP .. oder die anderen 100 arten die es gibt...MVC Pattern oder noch besser: MVVM.
ist es immerDas Problem ist, dass der Sachverhalt schwer zu erklären ist.
wenn dein Code nicht idioten sicher ist musst du ihn überarbeitenDas ist ziemlich komplex.
bindings ist da dein anlaufpunkt, nur du sagst immer nur bröckchen was es schwer machtSobald sich ein Wert ändert, egal in welchem Textfeld, müssen alle anderen angepasst werden.
Das habe ich auch gedacht.Um die Methode aus der anderen Klasse aufzurufen brauchst du natürlich die Instanz der Klasse in der die Methode ist.
Was die Bindings angeht bin ich leider immer noch unwissend.ist es immer
wenn dein Code nicht idioten sicher ist musst du ihn überarbeiten
bindings ist da dein anlaufpunkt, nur du sagst immer nur bröckchen was es schwer macht
1. Lieferant Listenpreis Einkaufspreis Rabatt aktualisieren Datum aktualisiert
(ChoiceBox) (TextField) (TextField) (TextField) (Button) (TextField)
Habe schon versucht so gut es geht, alles zu trennen.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.
ist das ein studiums projekt oder privates projekt?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.
Nein, wenn ich als Händler einen neuen Artikel anlege, gibt es für diesen Artikel unterschiedliche Lieferanten.also ich stell jetzt mal annahmenJava:1. Lieferant Listenpreis Einkaufspreis Rabatt aktualisieren Datum aktualisiert (ChoiceBox) (TextField) (TextField) (TextField) (Button) (TextField)
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?
Studiere derzeit noch, das Projekt ist allerdings privat.ist das ein studiums projekt oder privates projekt?
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;
}
}
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";
}
}
Ich wüsste gerade nicht mal, WIE ich die benutzen sollte, wir haben es komplett anders gelernt.wenn du sie nicht benutzt ist auch gut hab ich kein Problem damit![]()
Da würde ich sagen schaue dir mal binding von Properties an.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.
was habt ihr denn gelernt? und wie? bis jetzt ist in deinem CodeIch 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.
Ja, werde mich da wohl mal dran setzen. DankeDa würde ich sagen schaue dir mal binding von Properties an.