Mehrere berechnungen auf einem Button legen?

Nerdy Mole

Mitglied
Hallöchen miteinander 🙂

Nachdem mir bei meiner letzten frage so gut geholfen wurde hoffe ich erneut auf eure Hilfe 😳

Mein momentanes Problem ist wie folgt :

Ich will mit einem Button die "Rechnung" des Programms ändern...
Das ganze sollte dann so laufen :

Ich habe 2 Textfelder mit Berechnung Button etc. damit kann man den Prozentualen Anstieg berechnen... soweit so gut.

Nun will ich aber mit Hilfe eines anderen Buttons das Programm so umändern das es andere Berechnungen durchführen kann ohne das dabei der Berechnungsbutton äußerlich verändert wird. z.B. Brutto,Netto Rechnung u.ä
Also praktisch ein "Multitool" welches mehrere Rechner inne hat.
Ich habe bereits boolean, if.. und equals ausprobiert aber ich kriege es einfach nicht zum laufen..


Java:
                boolean T = true;
                double x;
		double a = Double.parseDouble(tf1.getText());
		double b = Double.parseDouble(tf2.getText());
		if (T=true) {
                double c = (b/a-1)*100;
	        c = Math.round(100.0 * c) / 100.0;
                l4.setText(" = " +c +"%");
                 
        
          }
          else
          {	
		  x = a/100*19;
          label4.setText(""+x);
         
           }

und der "Wechsel" Button (der die Berechnung ändern soll) hat
boolean T = false; inne


Ich versuchs dann mal weiter..:rtfm: hoffe aber das mir hier jemand helfen kann
 
Zuletzt bearbeitet:
Du könntest z.b einen counter verwenden der von 0 - 2 hochzählt, und dann wieder auf 0 gesetzt wird 🙂

0 = normale rechnung / counter +1 bei klick
1 = zweite berechnung / counter +1 bei klick
2 = counter wird wieder auf 0 gesetzt,

Ich habe sowas ähnliches mal unter Android verwendet, so hast du nicht das problem das der button nach dem ersten klick wieder den Status ändert, sondern erst nach dem zweiten .
 
Erstmal danke für die schnelle Antwort! hört sich soweit auch Vernünftig an ! 🙂

Allerdings weiß ich nun überhaupt nicht wie man einen Counter einbaut?
Geschweige denn wie ich per Mausklick ihn um 1. immer erhöhen kann.
Wäre dir sehr verbunden wenn du mir da vll. weiterhelfen könntest 😳
 
Ich versuch mal es dir vom Handy aus zu erklären,

Java:
public class Foo {
  private int counter = 0;
  JButton btn;

public Foo (){
 btn = new JButton ("klick");
 btn.addActionListener (new ActionListener (){
  
  @Override
   public void actionPerformed(ActionEvent event){
       switch (counter){
          case 0:
              //rechnung 
                 counter ++;
       break;
          case 1:
                / / andere rechnung
                counter++;
          case 2:
               counter = 0; 
          break; 
       }
   }
});
}

}

Da ich den Code nicht testen kann, geb ich kein Gewähr auf Funktion, sonst musst du warten bis ich zuhause bin 😉

ggf. Musst Du es Auch mit Einer If Anweisung Realisierten, falls beim erhöhen des counters den folgecase direkt mitausführt.
 
Zuletzt bearbeitet:
Wie gesagt falls der nächste case in dem switch mit ausgeführt werden sollte, musst du für jede Bedingung ein if statement erstellen

Java:
@Override
public void actionPerformed(ActionEvent event){

  if(event.getSource() == btn && counter == 0){
     //anweisung 
     counter++;
  }
  if(event.getSource() == btn && counter == 1){
     //anweisung  
     counter++;
  }
  if(event.getSource() == btn && counter == 2){
     //anweisung 
     counter = 0;
  }
}

nicht so schön wie die Lösung mit dem switch aber sollte so funktionieren , poste mal deinen Code dann schau ich mir das mal an
 
Zuletzt bearbeitet:
Java:
	    double a = Double.parseDouble(tf1.getText());
            double b = Double.parseDouble(tf2.getText());
	   
	   
	   
	    
    if(event.getSource() == btn && counter == 0){
           
           double c = (b/a-1)*100;
	       c = Math.round(100.0 * c) / 100.0;
           
           l4.setText(" = " +c +"%");
     counter++;
    
     }
    
    if(event.getSource() == btn && counter == 1){
        
          double xx = a/100*19;
          double yy = a-xx;  
	     l4.setText(""+yy); 
     counter++;
    
     }
    
    if(event.getSource() == btn && counter == 2){
     //anweisung 
     counter = 0;
    }
    }
 
Zuletzt bearbeitet:
Ok, erstmal zu dem was mir auffällt

-Datenkapselung

du solltest deine Berechnungen in eingenständige Methoden auslagern, um dein Code übersichtlicher zu gestalten und die ausführung zu kapseln.
z.B

Java:
public double calculate(double valueOne, double ValueTwo){
  double result = 0.0;
   
   // result = deine berechnungen
   
   return result;
}

Daraus resultiert dann z.B solch ein aufruf bei Buttonklick

Java:
if(event.getSource() == btn && counter == 0){

   txtField.setText(String.format("%.2f %%", calculate(valueOne, valueTwo));
   counter++;
}

-Aussagekräftige Namen

ich vermute mal
Code:
14
ist ein JTextField ?
demnach würde ich dieses auch so benennen , z.B
Code:
txtFieldOne
/
Code:
 inputField
.... o.ä

-Zu deinem Code, poste doch bitte mal den vollen code der Klasse sonst kann ich mir da keinen überblick drüber verschaffen, incl. der importe etc. danke

Hier mal ein KSKB, beachte aber das die Rechnung die du ausführen willst a.) nicht vollständig implementiert ist und b.) diese zu einem nagativen ergebnis führen kann welchen ggf. nicht dargestellt wird, zudem hab ich mir jetzt für das Beispiel mal auf Exception Handling verzichtet.

Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Foo {
	
	JButton btn;
	JTextField txtOne, txtTwo, txtResult;
	private int counter = 0;
	JFrame frame;
	JPanel panel;
	
	public Foo() {
		init();
		addComponents();
		setListener();
	}
	
	void init(){
		frame = new JFrame("Rechner");
		panel = new JPanel();
		btn = new JButton("Rechnen");
		
		txtOne = new JTextField();
		txtTwo = new JTextField();
		txtResult = new JTextField();
		
		txtOne.setPreferredSize(new Dimension(120,30));
		txtTwo.setPreferredSize(new Dimension(120,30));
		txtResult.setPreferredSize(new Dimension(120,30));
		
		
		frame.setSize(400,400);
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
	}
	
	void addComponents(){
		panel.add(txtOne);
		panel.add(txtTwo);
		panel.add(btn);
		
		frame.add(panel);
		frame.add(BorderLayout.PAGE_END, txtResult);
	}
	
	void setListener(){
		btn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent event) {
				
				if(event.getSource() == btn){
					counter++;
				}
				
				if (counter == 1) {
					
					double a = Double.parseDouble(txtOne.getText().toString());
					double b = Double.parseDouble(txtTwo.getText().toString());
					
					txtResult.setText(calculate(a,b));
				}
				
				if (counter == 2) {
					txtResult.setText("");
					counter = 0;
				}
			}
		});
	}
	
	public void show(){
		frame.setVisible(true);
	}
	
	public String calculate(double a, double b){
		return String.valueOf(String.format("%.2f %%", (a / b - 1) * 100));
	}
	
	public static void main(String[] args) {
		new Foo().show();
	}
}

[EDIT]
WICHTIG : Du müsst den Counter außerhalb deiner Berechnungen erhöhen, sonst wird direkt nach der Berechnung die Folgebedingung erfüllt. !
[/EDIT]
 
Zuletzt bearbeitet:
[TIPP]Wenn du nun den counter mit jedem Buttonklick außerhalb der bedingungen erhöhst , kannst du auch wieder den switch zu Fallunterscheidung verwenden .[/TIPP]
 
Das ist nun der komplette Code...

Java:
import java.awt.*;
import java.math.*;
import java.io.IOException; 
import java.io.*;
import java.util.*;
import java.io.FileOutputStream;
import java.io.File;
public class Frame1 extends Frame

{
        
	public Frame1()
	{
		// This code is automatically generated by Visual Cafe when you add
		// components to the visual environment. It instantiates and initializes
		// the components. To modify the code, only use code syntax that matches
		// what Visual Cafe can generate, or Visual Cafe may be unable to back
		// parse your Java file into its visual environment.
		
		//{{INIT_CONTROLS
		setLayout(null);
		setBackground(java.awt.Color.darkGray);
		setSize(687,341);
		setVisible(false);
		button1.setLabel("Berechne");
		add(button1);
		button1.setBackground(java.awt.Color.gray);
		button1.setFont(new Font("Dialog", Font.BOLD, 20));
		button1.setBounds(216,156,180,36);
		add(tf1);
		tf1.setBackground(new java.awt.Color(128,128,255));
		tf1.setFont(new Font("Dialog", Font.BOLD, 20));
		tf1.setBounds(24,48,144,36);
		l1.setText("Vorher");
		l1.setAlignment(java.awt.Label.CENTER);
		add(l1);
		l1.setForeground(java.awt.Color.red);
		l1.setFont(new Font("Dialog", Font.BOLD, 25));
		l1.setBounds(12,12,156,24);
		add(tf2);
		tf2.setBackground(new java.awt.Color(128,128,255));
		tf2.setFont(new Font("Dialog", Font.BOLD, 20));
		tf2.setBounds(24,144,144,36);
		l2.setText("Nachher");
		l2.setAlignment(java.awt.Label.CENTER);
		add(l2);
		l2.setForeground(java.awt.Color.red);
		l2.setFont(new Font("Dialog", Font.BOLD, 25));
		l2.setBounds(24,108,144,24);
		label1.setText("=>");
		add(label1);
		label1.setFont(new Font("Dialog", Font.ITALIC, 40));
		label1.setBounds(168,96,48,36);
		button2.setLabel("Eingaben Löschen");
		add(button2);
		button2.setBackground(java.awt.Color.gray);
		button2.setFont(new Font("Dialog", Font.BOLD, 20));
		button2.setBounds(216,204,180,36);
		label2.setText("Anstieg in %");
		label2.setAlignment(java.awt.Label.CENTER);
		add(label2);
		label2.setForeground(java.awt.Color.red);
		label2.setFont(new Font("Dialog", Font.BOLD, 25));
		label2.setBounds(216,48,180,48);
		l4.setAlignment(java.awt.Label.CENTER);
		add(l4);
		l4.setBackground(java.awt.Color.gray);
		l4.setFont(new Font("Dialog", Font.BOLD, 14));
		l4.setBounds(216,96,180,48);
		button4.setLabel("MwST Rechner");
		add(button4);
		button4.setBackground(java.awt.Color.lightGray);
		button4.setFont(new Font("Dialog", Font.BOLD|Font.ITALIC, 12));
		button4.setBounds(552,300,132,36);
		button3.setLabel("Prozentualer Anstieg");
		add(button3);
		button3.setBackground(java.awt.Color.lightGray);
		button3.setFont(new Font("Dialog", Font.BOLD, 12));
		button3.setBounds(552,264,132,36);
		label3.setText("Bruttogehalt");
		add(label3);
		label3.setBounds(564,36,8,8);
		setTitle("AWT Application");
		//}}
		
		//{{INIT_MENUS
		//}}
		
		//{{REGISTER_LISTENERS
		SymWindow aSymWindow = new SymWindow();
		this.addWindowListener(aSymWindow);
		SymAction lSymAction = new SymAction();
		button1.addActionListener(lSymAction);
		button2.addActionListener(lSymAction);
		button4.addActionListener(lSymAction);
		button3.addActionListener(lSymAction);
		//}}
	}
	
	public Frame1(String title)
	{
		this();
		setTitle(title);
	}
	
    /**
     * Shows or hides the component depending on the boolean flag b.
     * @param b  if true, show the component; otherwise, hide the component.
     * @see java.awt.Component#isVisible
     */
    public void setVisible(boolean b)
	{
		if(b)
		{
			setLocation(50, 50);
		}	
		super.setVisible(b);
	}
	
	static public void main(String args[])
	{
	  // File f = new	File ("test.txt");
	   //try {
	     
	        //Filewriter fw = new FileWriter(f);
           // fw.write(""+y + " = " +c +"%");
           // fw.close();
      	 {
	
	   }
		
		
		 
		
		try
		{
			//Create a new instance of our application's frame, and make it visible.
    		(new Frame1()).setVisible(true);
		}
		catch (Throwable tf3)
		{
			System.err.println(tf3);
			tf3.printStackTrace();
			//Ensure the application exits with an error condition.
			System.exit(1);
		}
	}
	
	public void addNotify()
	{
		
	
		// Record the size of the window prior to calling parents addNotify.
		Dimension d = getSize();
		
		super.addNotify();
	
		if (fComponentsAdjusted)
			return;
	
		// Adjust components according to the insets
		setSize(getInsets().left + getInsets().right + d.width, getInsets().top + getInsets().bottom + d.height);
		Component components[] = getComponents();
		for (int i = 0; i < components.length; i++)
		{
			Point p = components[i].getLocation();
			p.translate(getInsets().left, getInsets().top);
			components[i].setLocation(p);
		}
		fComponentsAdjusted = true;
	}
	
	// Used for addNotify check.
	boolean fComponentsAdjusted = false;
	
	//{{DECLARE_CONTROLS
	java.awt.Button button1 = new java.awt.Button();
	java.awt.TextField tf1 = new java.awt.TextField();
	java.awt.Label l1 = new java.awt.Label();
	java.awt.TextField tf2 = new java.awt.TextField();
	java.awt.Label l2 = new java.awt.Label();
	java.awt.Label label1 = new java.awt.Label();
	java.awt.Button button2 = new java.awt.Button();
	java.awt.Label label2 = new java.awt.Label();
	java.awt.Label l4 = new java.awt.Label();
	java.awt.Button button4 = new java.awt.Button();
	java.awt.Button button3 = new java.awt.Button();
	java.awt.Label label3 = new java.awt.Label();
	//}}
	
	//{{DECLARE_MENUS
	//}}
	
	class SymWindow extends java.awt.event.WindowAdapter
	{
		public void windowClosing(java.awt.event.WindowEvent event)
		{
			Object object = event.getSource();
			if (object == Frame1.this)
				Frame1_WindowClosing(event);
		}
	}
	
	void Frame1_WindowClosing(java.awt.event.WindowEvent event)
	{
		// to do: code goes here.
	}

	
	class SymAction implements java.awt.event.ActionListener
	{
		public void actionPerformed(java.awt.event.ActionEvent event)
		{
			Object object = event.getSource();
			if (object == button1)
				button1_ActionPerformed(event);
			else if (object == button2)
				button2_ActionPerformed(event);
			if (object == button4)
				button4_ActionPerformed(event);
			else if (object == button3)
				button3_ActionPerformed(event);
			
			
		}
	}


	void button1_ActionPerformed(java.awt.event.ActionEvent event)
	{
		// to do: code goes here.   
	    
	    String Brutto = new String("Bruttogehalt");
	    String label=l1.getText();
	    String labeltest=label3.getText();
	    String Vorher = new String("Vorher");
	    double a = Double.parseDouble(tf1.getText());
		double b = Double.parseDouble(tf2.getText());
	    if (label.equals(Vorher))
	         {
	            double c = (b/a-1)*100;
	            c = Math.round(100.0 * c) / 100.0;
                l4.setText(" = " +c +"%");
             }
        
                 if (label.equals(label3))
                 {         
                 double xx = a/100*19;
                 double yy = a-xx;  
	             l4.setText(""+yy);
                 }
 
  }	
	  	        	         	         
	 

	void button2_ActionPerformed(java.awt.event.ActionEvent event)
	{
		// to do: code goes here.
		tf1.setText("");
		tf2.setText("");
		l4.setText("");
			 
	}

	void button4_ActionPerformed(java.awt.event.ActionEvent event)
	{
		// to do: code goes here
	
	  	        	         	         		
		l1.setText("Bruttobetrag");
		l2.setText("Nettobetrag");
								 
	}

	void button3_ActionPerformed(java.awt.event.ActionEvent event)
	{
		// to do: code goes here.
		l1.setText("Vorher");
		l2.setText("Nachher");
			 
	}
}
 
deshalb bin ich absolut kein Freund von Swing / AWT designern ^^

schau ich mir gleich mal in ruhen an .....

[WR]Hat es einen bestimmten Grund warum du mit AWT anstelle von Swing arbeitest ?[/WR]

[TIPP]Variablen werden lowerCamelCase geschrieben[/TIPP]

[EDIT]Der Code der da durch Visual Cafe erzeugt wird ist btw. grauenvoll zu lesen in verbindung mit den ganzen inkorrekt deklarierten Variablen[/EDIT]

[WR]Null Layouts are Evil 😉[/WR]

Ich vermute mal start es geht um folgenden code ?

Java:
void button1_ActionPerformed(java.awt.event.ActionEvent event)
    {
        // to do: code goes here.   
        
        String Brutto = new String("Bruttogehalt");
        String label=l1.getText();
        String labeltest=label3.getText();
        String Vorher = new String("Vorher");
        double a = Double.parseDouble(tf1.getText());
        double b = Double.parseDouble(tf2.getText());
        if (label.equals(Vorher))
             {
                double c = (b/a-1)*100;
                c = Math.round(100.0 * c) / 100.0;
                l4.setText(" = " +c +"%");
             }
        
                 if (label.equals(label3))
                 {         
                 double xx = a/100*19;
                 double yy = a-xx;  
                 l4.setText(""+yy);
                 }
 
  }

falls dem so sein sollte lager die Berechnungen in jeweils eigene Methoden aus, erstelle ein Counter (Initialisiert mit 0) als Attribut der Klasse und zähle diesen wie in meinem Beispiel bei jedem klick +1.

dann schreibst du die zusätzliche Bedingung noch mit in die oben stehenden If statements, und erstellst das Statement welches den counter bei klick hochzählt , ebenfalls wie in meinem Beispiel

Java:
if(event.getSource() == btn){
  counter++;
}

if(label.equals(voher) && counter == 1){
 //erste berechnung
}

if(lable.equals(nachher)counter == 2){
  //zweite berechnung
}

zusätzlich könntest du noch beim 3ten klick z.B die Textfelder mit .setText(""); wieder leeren , ebenfalls wie in meinem KSKB. ( und auch dieses wiederrum in eine eigene Methode auslagern.)

[EDIT]
dein
Code:
vorher
und
Code:
nachher
kannst du übrigens wenn du den counter implementierst komplett weglassen.
[/EDIT]

[EDIT]Hattest du dir mein KSKB mal angeschaut ?, Falls nicht kopier das mal in eine neue Klasse Foo und führe es aus, der erste Klick berechnet die Textfelder, der 2te löscht diese[/EDIT]

Dein Konkretes problem ist das wenn du ein boolschen wert nutzt dein button nur den status
Code:
true oder false
haben kann , du möchtest aber 2 Aktionen mit dem Button durchführen können und zusätzlich soll dein Button einen "Default" Wert haben insofern ich dich richtig verstanden habe, somit ist ein counter der den Status
Code:
0/1/2
haben kann genau richtig
 
Zuletzt bearbeitet:
Jetzt gerade sitze ich noch vor dem Error :

Error: C:\VisualCafeSE\Projects\Prozentualer Anstieg\Frame1.java(252): Undefined variable: btn


Java:
 int counter = 0;
	    String Brutto = new String("Bruttogehalt");
	    String label=l1.getText();
	    String labeltest=label3.getText();
	    String Vorher = new String("Vorher");
	    double a = Double.parseDouble(tf1.getText());
		double b = Double.parseDouble(tf2.getText()); 
	   
	   
	   
	   
	   
	   
	   
	    if(event.getSource() == btn){
        counter++;
        }
 
        if(label.equals(Vorher) && counter == 1){
                double c = (b/a-1)*100;
	            c = Math.round(100.0 * c) / 100.0;
                l4.setText(" = " +c +"%");
        }
 
        if(label.equals(Brutto)&& counter == 2){
                 double xx = a/100*19;
                 double yy = a-xx;  
	             l4.setText(""+yy);
        }
 
das liegt daran weil dein Button nicht mit
Code:
btn
benannt ist , du musst schon deine Variablennamen verwenden, ich hatte meine variable nur so genannt da es mir Schreibarbeit erspart und übersichtlich ist 😉

[TIPP]
Das Problem an der Ganzen Sache ist , das dadurch das du dir den Code zusammengeklickt hast, zwar das Grundgerüst steht, (wenn auch ziemlich unübersichtlich und wirr) aber dir trotzdem die Basics fehlen um zu verstehen wie das ganze ineinandergreift,

das ganze soll ein Brutto/Netto rechner werden korrekt ?
[/TIPP]

dann würde ich an deiner Stelle die Daten kapseln, erstelle dir eine Methode die als Eingabeparameter einen Wert vom Typ double hat, dies stellt dein Bruttogehalt dar, die Methode sollte ebenfalls eine lokal definierte variable haben die dein Ergebnis darstellt(also das Nettogehalt) und den Rückgabewert double haben , da sie dir das Ergebnis (Brutto - tara) zurückgeben soll.

Die Methodendeklaration sehe dann so aus :

Java:
public double berechneNetto(double bruttoGehalt){
  double nettoGehalt;
 
  //....hier kommt der Code für die Berechnung rein 
  
  return nettoGehalt;
}

so da du nun deine Berechnung in eine Methode ausgelagert hast, kannst du nun beim ButtonKlick auf diese Methode zugreifen, sprich du kannst beim betätigen des Buttons anstelle des ganzen Codes den du ausgeführt hast , diese methode aufrufen und als Eingabeparameter den inhalt deines Textfeldes verwenden , das würde dann z.B so aussehen (hier schon innerhalb von actionPerformed)

Java:
if(event.getSource() == btn && counter == 1){
  berechneNetto(Double.parseDouble(meinTextFeld.getText())); // hier incl. Parsing
}

[WR]Die namen der Variablen sind wieder fiktiv gewählt![/WR]

Wenn du nun auf deinen Button klickst wird der Counter wie in meinen vorherigen Beispielen um +1 erhöht, das bedeutet der counter ist nun 1 und die Bedingung oben gilt als erfüllt, demnach wird nun die Methode
Code:
berechneNetto()
ausgeführt die als Eingabewert nun den Inhalt deins Textfeldes verwendet.

So weiter im Text, wenn du nun wiederholt auf den Button klicktst, wird durch diese Anweisung

Java:
if(event.getSource() == btn){
  counter++;
}

der counter ein weiteres mal um +1 erhöht, das bedeutet der Counter ist nun 2

und somit wird die 2te Bedingung erfüllt, nämlich

Java:
if(event.getSource() == btn && counter == 2){...}

in dieser Anweisung könntest du jetzt wieder eine neue Methode aufrufen die dann das ausführt was du damit bezwecken möchtest, sei es die Textfelder zurücksetzen oder ähnliches.
 
Zuletzt bearbeitet:
Das "Problem" 😳 mit dem btn hab ich nu auch mal geändert zum entsprechenden button..
funzt aber immer noch nicht.
Und nach "meinem empfinden" hab ich das mit den einzelnen Methoden soweit richtig umgesetzt aber nu rechnet der nichts mehr (also auch keine Fehlermeldung o.ä).




Java:
     double counter = 0;
         if(event.getSource() == button1 && counter == 1){
         berechneNetto(Double.parseDouble(l1.getText()));
        }
      
      if(event.getSource() == button4){
         counter++;
        
        }
      if(event.getSource() == button1 && counter == 2){
      AndereRechnung(Double.parseDouble(l1.getText()));
      
      
      
    }
    }

Methoden :
Java:
{
     
    public double berechneNetto(double bruttoGehalt){
    
    double nettoGehalt;
    double a = Double.parseDouble(tf1.getText());
     double xx = a/100*19;
     double yy = a-xx;  
	 l4.setText(""+yy);
    
    return bruttoGehalt;
 
 }
    public double AndereRechnung(double AndereRechnung){
    double AndereR;
    double a = Double.parseDouble(tf1.getText());
    double b = Double.parseDouble(tf2.getText());
    double c = (b/a-1)*100;
    c = Math.round(100.0 * c) / 100.0;
  
    return AndereRechnung;
}

____

Sorry das ich dir soviel unnötig Arbeit bereite.
 
Das hier

Java:
double counter = 0;  // warum ist counter ein double ?
 
         if(event.getSource() == button1 && counter == 1){
         berechneNetto(Double.parseDouble(l1.getText()));
        }
      
      if(event.getSource() == button4){
         counter++;
        
        }
      if(event.getSource() == button1 && counter == 2){
      AndereRechnung(Double.parseDouble(l1.getText()));
      
      
      
    }

kann ebenso wenig wie das hier funktionieren :

Java:
    public double berechneNetto(double bruttoGehalt){
    
    double nettoGehalt;
    double a = Double.parseDouble(tf1.getText());
     double xx = a/100*19;
     double yy = a-xx;  
     l4.setText(""+yy);
    
    return bruttoGehalt;
 
 }
    public double AndereRechnung(double AndereRechnung){
    double AndereR;
    double a = Double.parseDouble(tf1.getText());
    double b = Double.parseDouble(tf2.getText());
    double c = (b/a-1)*100;
    c = Math.round(100.0 * c) / 100.0;
  
    return AndereRechnung;
}


also nochmal auf 0

Bitte vergleiche mal folgenden Code in ruhe und sag mir was genau dir auffällt :

Java:
double counter = 0;

         if(event.getSource() == button1 && counter == 1){
         berechneNetto(Double.parseDouble(l1.getText()));
        }
      
      if(event.getSource() == button4){  // warum auf einmal button 4 ???
         counter++;
        
        }
      if(event.getSource() == button1 && counter == 2){
      AndereRechnung(Double.parseDouble(l1.getText()));
      
      
      
    }

Java:
int counter = 0;

// counter wird hier als Attribut der Klasse deklariert, nicht lokal ! WICHTIG !

if(event.getSource() == button1){
  counter++;
}

if(event.getSource() == button1 && counter == 1){
  berechneNetto(Double.parseDouble(l1.getText()));
}

if(event.getSource() == button1 && counter == 2){
  berechneNetto(Double.parseDouble(l1.getText()));
}

auch hier könnte man, insofern man mit dem Ergebnis weiterrechnen möchte, dieses in einer Globalen Variable speichern , also einer Instanzvariable

weiter im Text

was fällt dir hier auf, genau wie auch bei deiner anderen geschriebenen Methode :

Java:
    public double AndereRechnung(double AndereRechnung){  // <<---
 
 // -----------------------------------------------
    double AndereR;
    double a = Double.parseDouble(tf1.getText());
    double b = Double.parseDouble(tf2.getText());   // dieser ganze block wird nicht ausgeführt
    double c = (b/a-1)*100;
    c = Math.round(100.0 * c) / 100.0;
  
 //------------------------------------------------
    return AndereRechnung;  // <<----  was fällt dir auf ?

[TIPP]variablen schreibt man lowerCamelCase[/TIPP]

Richtig ! Du gibst das was du als Eingabeparameter verwendest einfach zurück, natürlich wird dann nichts gerechnet. 😀

Nochmal zum Verständniss:

deine Textfelder enthalten Strings , an diese kommst du z.B mit tf1.getText();

diese musst du dann Parsen um daraus einen Wert in einer Variable zu speichern z.B vom Typ double.

das könnte dann z.B folgendermaßen aussehen wenn du bruttogehalt und steuerklasse verwenden möchtest um das netto zu errechen.

Java:
double bruttoGehalt = Double.parseDouble(tf1.getText());

double steuerKlasse = Integer.parseInt(tf2.getText());

wenn du jetzt eine Hilfsmethode zum berechnen der Nettogehalts hast, dann kannst du diese beiden ermittelten Werte als Eingabeparameter nutzen, diese würde dann folgendermaßen aussehen

Wir übergeben der Methode die beiden Werte

DAS IST NUR EIN FIKTIVES BEISPIEL !
Java:
public double berechneNetto(bruttoGehalt, steuerKlasse){
  return (bruttoGehalt / steuerKlasse -1) * 100;
}
 
Zuletzt bearbeitet:
Korrektur , war auf die schnelle

Java:
public double berechneNetto(double bruttoGehalt, int steuerKlasse){
  return (bruttoGehalt / steuerKlasse -1) * 100;
}

aufrufen würdest du die Methode dann ganz normal wie jede andere auch


Java:
berechneNetto(bruttoGehalt, steuerKlasse);

Ich MUSS die Frage einfach stellen, was genau soll der 2te klick auf den gleichen Button den in deinem speziellen Fall eigentlich machen ??

du kannst ja, je nachdem wie du die Methoden schreibst mit dem ersten schon alles Berechnen ?

Also , ich habe mir mal die Mühe gemacht und ein Kleines Programm geschrieben welches diese Eigenschaften aufweist, es ist maximal Simpel aufgebaut da ich gleich los muss und es geht nur darum das du verstehst was bzw. wie man diese Methoden und variablen nutzt, bitte kopiere den Source Code und Kompiliere, (ich habe keine Fehlerbehandlung hinzugefügt !)

Gib wenn du es ausführst einfach mal 2 Werte ein und klicke berechnen, schau dir das Ergebnis an und klicke erneut auf berechnen.

Java:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class Foo implements ActionListener{
	
	JFrame frame;
	JPanel panel;
	JTextField brutto, steuerKlasse;
	JLabel netto;
	JButton btn;
	
	private int counter;
	
	public Foo() {
		this.counter = 0;
		init();
		addComponents();
		addListener();
	}

	private void init() {
		frame = new JFrame("Gehaltsrechner");
		frame.setSize(400,150);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
		panel = new JPanel();
		
		btn = new JButton("Berechnen");
		
		brutto = new JTextField();
		brutto.setPreferredSize(new Dimension(120,25));
		
		steuerKlasse = new JTextField();
		steuerKlasse.setPreferredSize(new Dimension(50,25));
		
		netto = new JLabel();
		
	}
	
	private void addListener(){
		btn.addActionListener(this);
	}
	
	private void addComponents(){
		panel.add(new JLabel("Bitte tragen Sie Ihr Bruttogehalt und Ihre Steuerklasse ein : "));
		panel.add(brutto);
		panel.add(steuerKlasse);
		panel.add(btn);
		panel.add(netto);
		
		
		frame.add(panel);
	}
	
	public void show(){
		frame.setVisible(true);
	}
	
	private void berechneNetto(double brutto, int steuerKlasse) {
		netto.setText(String.valueOf((brutto / steuerKlasse -1) * 100));
		
	}
	
	private void leereTextFelder(JLabel label, JTextField...fields) {
		for(JTextField f : fields){
			f.setText("");
		}
		
		label.setText("");
		
	}

	@Override
	public void actionPerformed(ActionEvent event) {
		
		if(event.getSource() == btn){
			counter++;
		}
		
		switch(counter){
		case 1:
			berechneNetto(Double.parseDouble(brutto.getText()), Integer.parseInt(steuerKlasse.getText()));
			break;
		case 2:
			leereTextFelder(netto, steuerKlasse, brutto);
			counter = 0;
			break;
		}
		
	}
	
	public static void main(String[] args) {
		new Foo().show();
	}
}

Wenn du Erklärungen zu dem Code brauchst schreib mir bitte die Stellen die du nicht verstehst raus ich erkläre dir das morgen dann in ruhe nochmal
 
Zuletzt bearbeitet:
Setzte doch einfach ein boolean wenn der Modus umgeschaltet wird, glaube das bist auch selbst drauf gekommen. Je nach Status vom bool weißt du welche Methode du aufrufen musst, d.h. lagere verschiedene Rechnungen in verschiedene Methoden um.
 
Zuletzt bearbeitet:
Setzte doch einfach ein boolean wenn der Modus umgeschaltet wird

Du kannst damit aber lediglich den Status True oder false abdecken. ......

Somit befindet sich der Button immer schon in einem der 2 Zustände, mit einem counter besteht nun die Möglichkeit beliebig viele Zustände zu simulieren, z.b einen default Status. ....
 
OK !

"Ich" habs hinbekommen 🙂

Zuerst will ich mir hier für jegliche Hilfe von euch bedanken, vorallem an kaoZ 🙂

Dennoch : Ich hab das Ziel auf eine ganz Simple Art und weise erreicht ^^

Ich habe einfach für jede Rechnung jeweils ein Button gemacht und diese hatten das Attribut .visible(false) (Sind unsichtbar).
Diese 2 Buttons hab ich dann Identisch aufeinandergesetzt und mit dem "Rechner Wechsel-Button" wurde der eine Button unsichtbar und der andere Sichtbar.


Java:
void button1_ActionPerformed(java.awt.event.ActionEvent event) <-- Andere Rechnung
	{
		// to do: code goes here.
		l1.setVisible(true);
		tf2.setVisible(true);
		l2.setVisible(true);
		textf1.setVisible(true);
		l2.setText("Alter Wert");
		l1.setText("Aktueller Wert");
		double K = Double.parseDouble(textf1.getText());
		double z = Double.parseDouble(tf2.getText());
		double q = (z/K-1)*100;
		q = Math.round(q*100)/100.0;
		
		if (q>0)
		
		l3.setText("Der Anstieg beträgt " +q +"%");
		else {
		l3.setText("Die Abnahme beträgt " +q +"%");    
		    
	    }		 
	}

	void button2_ActionPerformed(java.awt.event.ActionEvent event) <-- Lösch Button
	{
		// to do: code goes here.
		
		textf1.setText("");
		tf2.setText("");
		l3.setText("");
		tf3.setText("");
	    
	    
	}

	void button3_ActionPerformed(java.awt.event.ActionEvent event) <-- MwST Rechner-Button
	{
		// to do: code goes here.
		label1.setVisible(true);
		tf3.setVisible(true);
		l2.setText("Brutto");
		l1.setText("Netto");
		l1.setVisible(false);
		tf2.setVisible(false);
		l2.setVisible(false);
		textf1.setVisible(false);
		double Brutto = Double.parseDouble(tf3.getText());	 
	        double RechnungBrutto = (Brutto/100)*19;
	        double EndeBrutto = Brutto-RechnungBrutto;
		l3.setText(""+EndeBrutto +"€" +" Ohne 19% MwST");
		
		l2.setText("Mit MwST");
		l1.setText("Netto");
		tf2.setText("");
	}

	void button4_ActionPerformed(java.awt.event.ActionEvent event) <--- Rechner wechseln
	{
		// to do: code goes here.
		textf1.setVisible(false);
		label1.setVisible(true);
		tf3.setVisible(true);
		l1.setVisible(false);
		tf2.setVisible(false);
		l2.setVisible(false);
		textf1.setVisible(false);
		button1.setVisible(false);
		button3.setVisible(true);
			 
	}

	void button5_ActionPerformed(java.awt.event.ActionEvent event) <--- Wiederherstellen
	{
		// to do: code goes here.
		textf1.setVisible(true);
		label1.setVisible(false);
		tf3.setVisible(false);
		l1.setVisible(true);
		tf2.setVisible(true);
		l2.setVisible(true);
		l2.setText("Alter Wert");
		l1.setText("Aktueller Wert");
		button1.setVisible(true);
		button3.setVisible(false);	 
	}
}


Tatsächlich hab ich das ganze mehr oder weniger zufällig gemacht :lol:

Nochmals danke an alle die geholfen haben !


Mit freundlichen Grüßen
Nerdy Mole
 
Das "kann" man natürlich machen 😉

schöner jedoch wäre eine Innovative Lösung, ich denke mal insofern du dich intensiv mit der Thematik beschäftigst (bzw. allgemein der Programmiersprache JAVA), wirst du irgendwann den Code nochmal umschreiben (alleine schon weil es dich wahrscheinlich nervt das es damals nicht hingehauen hat ^^), es ist nämlich doch ein wahnsinnig großer Unterschied zwischen die Applikation "funktioniert", und einer Professionell erstellten Anwendung.

Aber solange du zufrieden bist und es für deine Bedürfnisse ausreichend ist , ist doch alles gut, schließlich führen viele Wege nach Rom :applaus:

und falls du dennoch irgendwelche Fragen haben solltest, immer raus damit 😉

[EDIT]
Ich muss zugeben, als ich angefangen habe zu Programmieren hab ich es tatsächlich einmal genauso gemacht, da mir einfach das Hintergrundwissen gefehlt hat und ich mich ausprobieren musste :lol:
[/EDIT]
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben