Variablen speicher

  • Themenstarter Themenstarter Milkaselnuss
  • Beginndatum Beginndatum
M

Milkaselnuss

Gast
Ich hab ein Problem. Ich habe ein Programm, in dem ein Zinsrechner verbaut ist (der funtkioniert auch) und ich habe das Ganze mit einem Swing am Anfang erweitert. Jetzt ist es so, dass ich im Swing die Variablen anzeigen will, aber es nicht funktioniert und ich komme auch nicht drauf, wie ich das hinkriegen soll.


Hier der Code:
Java:
package Zinsrechner1;

import java.awt.GridLayout;
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.JOptionPane;



public class Fenster extends JFrame implements ActionListener{
	
	private JButton Starten;
	private JButton Beenden;
	public static String eingabe = "";
	public static String prozenteingabe = "";
	public static String laufzeitseingabe = "";
	public static int Kapital = 0;
	
	public Fenster(){
		super ("Zinsrechner");
		JPanel Panel1 = new JPanel();
		JLabel Leer1 = new JLabel("Letztes Ergebnis:");
		JLabel Leer2 = new JLabel("");
		JLabel Leer3 = new JLabel("Kapital: " + eingabe);
		JLabel Leer4 = new JLabel("Zinssatz: " + prozenteingabe);
		JLabel Leer5 = new JLabel("");
		JLabel Leer6 = new JLabel("Laufzeit: " + laufzeitseingabe);
		JLabel Leer7 = new JLabel("Endkapital: " + Kapital);
		JLabel Leer8 = new JLabel("");
		Starten = new JButton("Zinsrechner ausführen");
		Beenden = new JButton ("Beenden");
		Starten.addActionListener(this);
		Beenden.addActionListener(this);
		Panel1.setLayout(new GridLayout(5,2));
		Panel1.add(Leer1);
		Panel1.add(Leer2);	
		Panel1.add(Leer3);
		Panel1.add(Starten);
		Panel1.add(Leer4);
		Panel1.add(Leer5);
		Panel1.add(Leer6);
		Panel1.add(Beenden);
		Panel1.add(Leer7);
		Panel1.add(Leer8);
		
		setContentPane(Panel1);
	}
	public void actionPerformed (ActionEvent Ereignis){
			Object Quelle = Ereignis.getSource();
			if (Quelle == Beenden){
				System.exit(0);
			}
			if (Quelle == Starten){
				int Wiederholung = 0;
				int ErrorOption = 0;
				String eingabe = JOptionPane.showInputDialog(null, "Wieviel Geld möchten Sie anlegen?");
				String prozenteingabe = JOptionPane.showInputDialog("Bei welchem Prozentsatz?");
				String laufzeitseingabe = JOptionPane.showInputDialog("Wieviele Jahre soll diese Investition laufen?");
				float prozent = Float.parseFloat(prozenteingabe);
				float kapital = Float.parseFloat(eingabe);
				int laufzeit = Integer.parseInt(laufzeitseingabe);
				
				if (kapital <= 0){
					JOptionPane.showConfirmDialog(null, "Ein Fehler ist aufgetreten (Fehler 301)! Kein Kapital angegeben!","Error",JOptionPane.PLAIN_MESSAGE, JOptionPane.ERROR_MESSAGE);
				 	ErrorOption++;}
				if (prozent <= 0){
					JOptionPane.showConfirmDialog(null, "Ein Fehler ist aufgetreten (Fehler 302)! Kein gültiger Prozentsatz eingegeben!","Error",JOptionPane.PLAIN_MESSAGE, JOptionPane.ERROR_MESSAGE);
				    ErrorOption++;}
				if (laufzeit < 1){
					JOptionPane.showConfirmDialog(null, "Ein Fehler ist aufgetreten (Fehler 303)! Keine gültige Laufzeit angegeben!","Error",JOptionPane.PLAIN_MESSAGE, JOptionPane.ERROR_MESSAGE);
					ErrorOption++;}
				
				while (Wiederholung < laufzeit)
				{

					float zinsen = kapital * prozent / 100;
					kapital = kapital + zinsen;
					Wiederholung++;
				}
				if (ErrorOption < 1)
					JOptionPane.showMessageDialog(null, "In " + laufzeit + " Jahren haben Sie " + kapital + " Euro auf ihrem Konto.", "", JOptionPane.PLAIN_MESSAGE);
			}
	}
	
	public static void main(String[] args){
		
		Fenster Zinsrechner = new Fenster();
		Zinsrechner.setSize(500,250);
		Zinsrechner.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Zinsrechner.setVisible(true);
		Zinsrechner.setLocationRelativeTo(null);
	}
}
 
Siehe Signatur.

Irgendwas läuft da nicht korrekt. Sieht das bei dir auch so aus?
 

Anhänge

  • Bildschirmfoto-Zinsrechner.png
    Bildschirmfoto-Zinsrechner.png
    11,8 KB · Aufrufe: 39
Zuletzt bearbeitet:
in deinem Fall kannst du die Label als Klassenattribute machen, dann kannst du im ActionListener darauf zugreifen. Variablennamen bitte klein schreiben 😉

ansonsten könntest du auch den Listener als anonym manchen und die Label als final deklarieren, dann kannst du ebenfalls in dem actionPerformed darauf zugreifen.

Dort dann einfach label.setText(...) und der Text wird angezeigt
 
Das geht nicht? hm schade.
Dann hätt ich allerdings noch ne Frage.
Wie mache ich das, dass 2 Frames nacheinander kommen? Ich wollte eigentlich erst ein Fenster mit
dem Text "Zinsrechner starten" und nach dem ersten Durchlauf soll da stehen "Erneut ausführen" und "Beenden"
 
Und wo willst du das anzeigen?

Wenn in die obenstehenden JLabels, dann:
- JLabel global definieren
-
Java:
void setText(String text)
Defines the single line of text this component will display.
- Du wirst sie dann auch final machen müssen, wenn du diese im Actionlistener aktualisierst


[EDIT]Oi ich werd alt und langsam :/[/EDIT]
 
Habs grad erst gelesen

Also zuerst einmal ja das sieht bei mir so aus und ist gewollt 😀

und das mit dem Label kapier ich ned. Ich brauch da ja die Variablen, die erst später deklariert werden sozusagen.
 
im Moment fügst du die Variablen einmal hinzu,... da haben sie aber noch keinen Wert. Also musst du sie später hinzufügen, wenn du sie gesetzt hast.

um sie im ActionListener zu benutzen musst du sie wie z.b. den Button " private JButton Starten;" als Attribut der Klasse deklarieren damit du im ActionListener drauf zugreifen kannst

Ein kleines Beispiel zum Verdeutlichen:

Java:
public class Fenster extends JFrame implements ActionListener{
    
	private JLabel lbl;
    
    public Fenster(){
    	this.setSize(200, 200);
    	this.setLayout(new GridLayout(1,1));
    	lbl=new JLabel("Hallo");
    	JButton btn=new JButton("change");
    	btn.addActionListener(this);
    	this.add(lbl);
    	this.add(btn);
    	
    }
    

	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		lbl.setText("HALLO2");
	}
	
    ...
 
Zuletzt bearbeitet:
Richtig, richtig geil!!!
Vielen Dank. Das ganze funktioniert jetzt genau so wie ichs mir vorgestellt habe!

Neuer Code:

Java:
package Zinsrechner1;

import java.awt.GridLayout;
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.JOptionPane;



public class Fenster extends JFrame implements ActionListener{
	
	private JButton Starten;
	private JButton Beenden;
	public static int kapital = 0;
	private JLabel Leer1;
	private JLabel Leer2;
	private JLabel Leer3;
	private JLabel Leer4;
	private JLabel Leer5;
	private JLabel Leer6;
	private JLabel Leer7;
	private JLabel Leer8;
	
	public Fenster(){
		super ("Zinsrechner");
		JPanel Panel1 = new JPanel();
		Leer1 = new JLabel("Letztes Ergebnis:");
		Leer2 = new JLabel("");
		Leer3 = new JLabel("Kapital: ");
		Leer4 = new JLabel("Zinssatz: ");
		Leer5 = new JLabel("");
		Leer6 = new JLabel("Laufzeit: ");
		Leer7 = new JLabel("Endkapital: ");
		Leer8 = new JLabel("");
		Starten = new JButton("Zinsrechner ausführen");
		Beenden = new JButton ("Beenden");
		Starten.addActionListener(this);
		Beenden.addActionListener(this);
		Panel1.setLayout(new GridLayout(5,2));
		Panel1.add(Leer1);
		Panel1.add(Leer2);	
		Panel1.add(Leer3);
		Panel1.add(Starten);
		Panel1.add(Leer4);
		Panel1.add(Leer5);
		Panel1.add(Leer6);
		Panel1.add(Beenden);
		Panel1.add(Leer7);
		Panel1.add(Leer8);
		
		setContentPane(Panel1);
	}
	public void actionPerformed (ActionEvent Ereignis){
			Object Quelle = Ereignis.getSource();
			if (Quelle == Beenden){
				System.exit(0);
			}
			if (Quelle == Starten){
				int Wiederholung = 0;
				int ErrorOption = 0;
				String eingabe = JOptionPane.showInputDialog(null, "Wieviel Geld möchten Sie anlegen?");
				String prozenteingabe = JOptionPane.showInputDialog("Bei welchem Prozentsatz?");
				String laufzeitseingabe = JOptionPane.showInputDialog("Wieviele Jahre soll diese Investition laufen?");
				float prozent = Float.parseFloat(prozenteingabe);
				float kapital = Float.parseFloat(eingabe);
				int laufzeit = Integer.parseInt(laufzeitseingabe);
				
				
				if (kapital <= 0){
					JOptionPane.showConfirmDialog(null, "Ein Fehler ist aufgetreten (Fehler 301)! Kein Kapital angegeben!","Error",JOptionPane.PLAIN_MESSAGE, JOptionPane.ERROR_MESSAGE);
				 	ErrorOption++;}
				if (prozent <= 0){
					JOptionPane.showConfirmDialog(null, "Ein Fehler ist aufgetreten (Fehler 302)! Kein gültiger Prozentsatz eingegeben!","Error",JOptionPane.PLAIN_MESSAGE, JOptionPane.ERROR_MESSAGE);
				    ErrorOption++;}
				if (laufzeit < 1){
					JOptionPane.showConfirmDialog(null, "Ein Fehler ist aufgetreten (Fehler 303)! Keine gültige Laufzeit angegeben!","Error",JOptionPane.PLAIN_MESSAGE, JOptionPane.ERROR_MESSAGE);
					ErrorOption++;}
				
				while (Wiederholung < laufzeit)
				{

					float zinsen = kapital * prozent / 100;
					kapital = kapital + zinsen;
					Wiederholung++;
				}
				if (ErrorOption < 1){
					JOptionPane.showMessageDialog(null, "In " + laufzeit + " Jahren haben Sie " + kapital + " Euro auf ihrem Konto.", "", JOptionPane.PLAIN_MESSAGE);}
				
				Leer3.setText("Kapital: " + eingabe);
				Leer4.setText("Zinssatz: " + prozenteingabe);
				Leer6.setText("Laufzeit: " + laufzeitseingabe);
				Leer7.setText("Endkapital: " + kapital);
			}
	}
	
	public static void main(String[] args){
		Fenster Zinsrechner = new Fenster();
		Zinsrechner.setSize(500,250);
		Zinsrechner.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Zinsrechner.setVisible(true);
		Zinsrechner.setLocationRelativeTo(null);
	}
	
}

Dabei hab ich jetzt die Texte, wie empfohlen, nach unten verlagert und das Ganze funktioniert einfach perfekt. Nochmal vielen Dank!!!
 

Zurück
Oben