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 :oops:

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:

kaoZ

Top Contributor
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 .
 

Nerdy Mole

Mitglied
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 :oops:
 

kaoZ

Top Contributor
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:

kaoZ

Top Contributor
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:

Nerdy Mole

Mitglied
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:

kaoZ

Top Contributor
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:

kaoZ

Top Contributor
[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]
 

Nerdy Mole

Mitglied
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");
			 
	}
}
 

kaoZ

Top Contributor
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:

Nerdy Mole

Mitglied
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);
        }
 

kaoZ

Top Contributor
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:

Nerdy Mole

Mitglied
Das "Problem" :oops: 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.
 

kaoZ

Top Contributor
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. :D

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:

kaoZ

Top Contributor
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:

dcc

Aktives Mitglied
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:

kaoZ

Top Contributor
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. ....
 

Nerdy Mole

Mitglied
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
 

kaoZ

Top Contributor
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:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D mehrere Berechnungen in einer Methode Java Basics - Anfänger-Themen 9
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 23
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
T Mehrere if bedingungen ohne & Java Basics - Anfänger-Themen 2
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
MiMa Java Doc mehrere Return Parameter Java Basics - Anfänger-Themen 11
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
Buroto Klassen Mehrere .txt Datein verbienden und anschließend auslisten Java Basics - Anfänger-Themen 10
S mehrere TreeSets so speichern, dass man sie miteinander vergleichen kann Java Basics - Anfänger-Themen 1
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
U Kann man bei Java gleich mehrere Bedingungen prüfen in der If, aber in einem "Satz"? Java Basics - Anfänger-Themen 1
Kotelettklopfer Mehrere Projekte in einem Git verwalten Java Basics - Anfänger-Themen 10
I JAX-RS Mehrere Parameter in Query Java Basics - Anfänger-Themen 3
M mehrere Rückgabenwerte aus Methode Java Basics - Anfänger-Themen 7
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
R Mehrere Buchstaben aus einem String entfernen Java Basics - Anfänger-Themen 1
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
Ich lerne Java. Methoden Mehrere Methoden mit Punkt Java Basics - Anfänger-Themen 45
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
F Mehrere Server Sockets in einer Anwendung Java Basics - Anfänger-Themen 9
T DoWhile Schleife über mehrere Mothoden Java Basics - Anfänger-Themen 5
B Methoden Mehrere ähnliche Methoden zusammenfassen Java Basics - Anfänger-Themen 24
E Mehrere Eingabezeilen gleichzeitig einlesen Java Basics - Anfänger-Themen 7
C Mehrere Zufallswerte Java Basics - Anfänger-Themen 4
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
R Error, wenn mehrere Clients gleichzeitig die Verbindung beenden Java Basics - Anfänger-Themen 16
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
O Datei in mehrere kleine Dateien umwandeln Java Basics - Anfänger-Themen 47
Henri Mehrere Ordner umbenennen Java Basics - Anfänger-Themen 11
E Mehrere Arrays addieren mit Übertrag Java Basics - Anfänger-Themen 13
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
J Mehrere paintComponenten in einem Programm Java Basics - Anfänger-Themen 0
F Mehrere Buttons mit einem ActionListener abdecken Java Basics - Anfänger-Themen 24
B Jeweils den Parent bekommen -> mehrere Ebenen Java Basics - Anfänger-Themen 2
javajoshi mehrere Threads: Methoden zentral unterbringen Java Basics - Anfänger-Themen 8
M Erste Schritte Mehrere eingaben in einer Line vergleichen (if equals...) Java Basics - Anfänger-Themen 6
L Mehrere Jars im Unterordner Java Basics - Anfänger-Themen 2
L LibGDX - mehrere Screens Java Basics - Anfänger-Themen 1
J Sudoku mehrere Lösungen Java Basics - Anfänger-Themen 29
F Mehrere Instanzen der Klasse A EINER Instanz der Klasse B übergeben Java Basics - Anfänger-Themen 3
T Mehrere JFrames gleichzeitig öffnen Java Basics - Anfänger-Themen 6
O Erste Schritte Scanner mehrere male benutzen (Konsole) Java Basics - Anfänger-Themen 7
S mehrere If Bedingungen Java Basics - Anfänger-Themen 5
F Mehrere Zeilen zu einer Zeile zusammenfügen und in eine Datei schreiben Java Basics - Anfänger-Themen 1
B Mehrere Zahlen speichern Java Basics - Anfänger-Themen 60
M mehrere extends? Java Basics - Anfänger-Themen 19
N Datei Zeilenweise einlesen, Ausgabe mehrere Arrays Java Basics - Anfänger-Themen 7
C ButtonController löst mehrere Methoden aus Java Basics - Anfänger-Themen 5
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
B Timer mehrere Male ausführen Java Basics - Anfänger-Themen 4
kilopack15 Mehrere Threads in einer Klasse Java Basics - Anfänger-Themen 8
F mehrere eingegebene Zahlen mit Zahlen von 1-9 multiplizieren Java Basics - Anfänger-Themen 18
F Mehrere Konstruktoren? Wofür? Java Basics - Anfänger-Themen 21
J Mehrere Eingabefelder programmiert (Zeigt Fehler an) Java Basics - Anfänger-Themen 6
Jinnai4 Mehrere Textfelder überprüfen Java Basics - Anfänger-Themen 16
N Mehrere Forms auf einem Panel Java Basics - Anfänger-Themen 6
Tommy Nightmare Variable auf mehrere Ungleichheiten prüfen Java Basics - Anfänger-Themen 18
D Mehrere Objekte in ein Objekt zusammenfassen Java Basics - Anfänger-Themen 16
D Input/Output Mehrere Befehle nacheinander ausführen Java Basics - Anfänger-Themen 20
K Mehrere Objekte anlegen Java Basics - Anfänger-Themen 23
N Integers aus Textdatei auslesen und mehrere Arrays erstellen Java Basics - Anfänger-Themen 9
S Verständnis - Frage mehrere SQL Statements in While Schleife Java Basics - Anfänger-Themen 0
J MVC Pattern, mehrere Controller/Views/Models Java Basics - Anfänger-Themen 0
J Mehrere IF Anweisungen und dazugehörige ELSE Java Basics - Anfänger-Themen 6
I Klassen Mehrere Java Klassen in einer .java Datei Java Basics - Anfänger-Themen 7
V Mehrere Dateien aus JFileChooser in eine ArrayList speichern Java Basics - Anfänger-Themen 2
F Mehrere Konstruktoren Java Basics - Anfänger-Themen 10
A Mehrere Radiobuttons Java Basics - Anfänger-Themen 3
B Klassen Mehrere Objekte mit Schleife erstellen - How? Java Basics - Anfänger-Themen 1
T Mehrere Methoden in der main-Methode verknüpfen und aufeinander anwenden Java Basics - Anfänger-Themen 2
V OOP Aufnahme von Dreiecken in ein/mehrere Objekte Java Basics - Anfänger-Themen 0
Q OOP Mehrere Instanzen auf ein Feld Java Basics - Anfänger-Themen 13
C Klasse auf mehrere Objekte zugreifen lassen Java Basics - Anfänger-Themen 26
G Mehrere If-else-Sätze der Reihe nach durchlaufen lassen Java Basics - Anfänger-Themen 2
K Mehrere String.valueOf() kürzer schreiben / "packen"? Java Basics - Anfänger-Themen 2
F String mehrere male ausgeben? Java Basics - Anfänger-Themen 4
H wie mehrere variablen in einfacher for-schleife? Java Basics - Anfänger-Themen 2
H möglichkeiten für for-schleife? (mehrere ausgangsvariablen?) Java Basics - Anfänger-Themen 9
M PdfBox - mehrere Formularseiten Java Basics - Anfänger-Themen 2
Z Mehrere XML-Dateien zu einer zusammenfügen Java Basics - Anfänger-Themen 3
M GUI- mehrere Komponenten auf Container adden Java Basics - Anfänger-Themen 2
I Erste Schritte Resource Bundle - Alles in einem File oder mehrere? => Faktor Performance Java Basics - Anfänger-Themen 2
F Methoden split() - Mehrere Zeichen Java Basics - Anfänger-Themen 5
F Erste Schritte Mehrere nextInt() Eingaben nebeneinander ausgeben Java Basics - Anfänger-Themen 12
A mehrere Panels in eigenen Klasssen in einem Frame Java Basics - Anfänger-Themen 16
A Mehrere 100.000 Elemente verlgeichen Java Basics - Anfänger-Themen 8
T Compiler-Fehler Mit Array und "for" mehrere ImageIcon erstellen Java Basics - Anfänger-Themen 7
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Speicherlast mehrere GB durch kleine png files? Java Basics - Anfänger-Themen 1
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
M Mehrere Variabeln zusammenfassen Java Basics - Anfänger-Themen 4
M Erste Schritte mehrere Objekte aus einer Klasse Java Basics - Anfänger-Themen 4
L String extrahieren mit Regular Expression über mehrere Zeilen hinweg Java Basics - Anfänger-Themen 1
B Mehrere Klassen miteinander kommunizieren lassen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben