Erste Schritte JButton funktioniert nicht trotz richtiger Methode.

V_Fynn03

Mitglied
Ich habe zu einer Bank welche ich programmiert habe mit einzahlen, auszahlen usw. eine Kontoklasse und eine GUI erstellt, über die das ablaufen soll. Es geht mir jetzt nur um die Methode "einzahlen". Diese Methode funktioniert eigentlich, aber nur wenn ich sie von der Bank aus teste, aber nicht in der GUI. Unten sind die Quelltexte von den Klassen und der GUI, könnte es sich mal jemand anschauen und vlt gucken wo der Fehler liegt. Die GUI hält übrigens die Klasse Bank und die Bank die Klasse Konto.







Java:
public class Bank {
    private Konto[] kto=new Konto[5];
    private int ppin, pktnr;
    public Bank() {
        for (int i= 0; i<5;i++){
            kto[i] = new Konto(i);
        }
    }

    public Konto FindeKonto (int pktnr) {
        for (int i=0; i<kto.length ; i++) {

            if (pktnr==kto[i].getktnr()) return kto[i];
        }
        return null;
    }

    public void einzahlen (int pktnr  , int b) {

        Konto dummy=FindeKonto(pktnr);

        dummy.einzahlen(b);
    }

    public void  auszahlen(int pktnr , int ppin , int b) {
        Konto dummy=FindeKonto(pktnr);
        if(dummy.getPinok(ppin)){
            dummy.auszahlen(b);
        }
    }

    public void überweisen(int fktnrAbheben , int pktnrEinzahlen ,int ppin,int b){
        for (int i=0; i<kto.length;i++){
            if(pktnrEinzahlen==kto[i].getktnr()){
                kto[i].einzahlen(b);
            }
            if(fktnrAbheben==kto[i].getktnr() && kto[i].getPinok(ppin)){
                kto[i].auszahlen(b);
            }
        }
    }
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Java:
import java.awt.*; //abstract windowing toolkit   
import javax.swing.*; //swing-Klassen   
import java.awt.event.*; //Event-Klassen

public class Layout extends JFrame implements ActionListener

 
{   
    private Bank bank = new Bank() ;
    private String [] s = {"Einzahlen" , "Auszahlen" , "Überweisung" , "Kontostand" , "Pin" , "Changepin"}; 
    private JButton [] jb = new JButton[s.length]; 
    private JTextArea jtf1,jtf2,jtf3,jtf4,jtf5; //Deklaration eines Objektes aus der Klasse JTextField   
    private JButton jb1,jb2,jb3,jb4,jb5,jb6;
    private Font f;   

    public Layout()   
    {   
        super("BankLayout"); //ruft den Konstruktor der Oberklasse (JFrame) auf   
        setDefaultCloseOperation(3); //schließen und alle Prozesse beenden   
        setLayout(null); //schaltet Layout Manager aus   
        setBounds(300,300,1100,700); //(x,y Breite,Höhe) vom Fenster   
        getContentPane().setBackground(new Color(198,44,58)); //RGB   
        jtf1 = new JTextArea(); //Instanziieren eines neuen Objekts der Klasse JTextField   
        f = new Font("Roman",1,20);   
        jtf1.setFont (f);   
        jtf1.setText("");   
        jtf1.setEditable(true);   
        jtf1.setBounds(680,300,145,60); //am Objekt selber wird Methode aufgerufen   
        add(jtf1); //fügt Objekt dem Cont ainer (=ContentPane) hinzu   
        setVisible(true); //schaltet ganzen JFrame auf SICHTBAR   
        setResizable(false) ;   
        jtf2 = new JTextArea(); //Instanziieren eines neuen Objekts der Klasse JTextField   
        jtf2.setFont (f);   
        jtf2.setText("");   
        jtf2.setEditable(true);   
        jtf2.setBounds(100,250,145,60); //am Objekt selber wird Methode aufgerufen   
        add(jtf2); //fügt Objekt dem Container (=ContentPane) hinzu   

        jtf3 = new JTextArea(); 
        jtf3.setFont (f);   
        jtf3.setText("");   
        jtf3.setEditable(true);   
        jtf3.setBounds(100,350,145,60); //am Objekt selber wird Methode aufgerufen   
        add(jtf3);

        jtf4 = new JTextArea();
        jtf4.setFont (f);
        jtf4.setText("Kontonummer");
        jtf4.setEditable(false);
        jtf4.setBounds(100,170,145,60);
        add(jtf4);

        jtf5 = new JTextArea();
        jtf5.setFont(f);
        jtf5.setText("Pin eingeben");
        jtf5.setEditable(false);
        jtf5.setBounds(100,430,145,60);
        add(jtf5);
        setVisible(true);

        jb1 = new JButton();
        jb1.setBounds(350,100,160,60);
        jb1.setText("Abheben");
        add (jb1);

        jb2 = new JButton();
        jb2.setBounds(350,170,160,60);
        jb2.setText("Einzahlen");
        add (jb2);

        jb3 = new JButton();
        jb3.setBounds(350,240,160,60);
        jb3.setText("Überweisung");
        add (jb3);

        jb4 = new JButton();
        jb4.setBounds(350,310,160,60);
        jb4.setText("Kontostand");
        add (jb4);

        jb5 = new JButton();
        jb5.setBounds(350,380,160,60);
        jb5.setText("Pin");
        add (jb5);

        jb6 = new JButton();
        jb6.setBounds(350,450,160,60);
        jb6.setText("Change Pin");
        add (jb6);

    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource()==jb[2]) {
            int pktnr = new Integer(jtf2.getText());
            int b = new Integer (jtf1.getText());

            bank.einzahlen(pktnr , b);

        }
        if (e.getSource()==jb[1]) {
            int pktnr = new Integer(jtf2.getText());
            int b = new Integer (jtf1.getText());
            int ppin = new Integer (jtf3.getText());

            bank.auszahlen(pktnr , ppin , b);
        }
    }
}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Java:
public class Konto
 
{
    private int ktostand , ktnr , pin;
    public Konto(int pktnr){
        ktnr= pktnr;
        pin=4711;
        ktostand=0;
    }
    public Konto(int pktnr , int ppin , int pktostand) {
        ktnr = pktnr ;
        pin = ppin;
        ktostand = pktostand;
    }
    public int getktostand() {
        
         return ktostand;
    }
    public void setPin(int pinneu , int pinalt) {
        if (pin==pinalt)pin = pinneu;
        else System.out.println("Falscher Pin") ;
        
        
    }
    public boolean getPinok(int ppin){
        return (pin==ppin);
      
    }
    public int getktnr() {       
        return ktnr;
    }
    public void einzahlen(int b){
        ktostand+=b;
    }
    public void auszahlen (int b){
        ktostand-=b;
    }
}
 

mihe7

Top Contributor
Wie im anderen Thread schon vermutet: es fehlt die Registrierung des ActionListeners. Außerdem vergleichst Du im ActionListener mit den falschen Buttons (jb2 vs jb[2]).
 

V_Fynn03

Mitglied
Also was genau muss ich jetzt noch ändern? Den ersten Punkt mit den unterschiedlichen Beschriftung der JButtons habe ich jetzt bearbeitet.
 

mihe7

Top Contributor
OK, Du musst erstmal verstehen, dass Swing in erster Linie ereignisgesteuert arbeitet. Wenn Du auf einen Button klickst, wird ein Ereignis ausgelöst - in dem Fall ein ActionEvent. Auf dieses Ereignis kannst Du mittels einer Implementierung von ActionListener reagieren, indem Du eine Implementierung von ActionListener beim jeweiligen Button registrierst. Dazu verwendest Du die Methode JButton#addActionListener.

Da Deine Klasse Layout das Interface ActionListener implementiert, kannst Du also schreiben:
Java:
        jb2 = new JButton();
        jb2.setBounds(350,170,160,60);
        jb2.setText("Einzahlen");      
        jb2.addActionListener(this);
        add (jb2);

Das array mit den Buttons ist doch leer oder übersehe ich etwas?
Würde ich auch sagen, darum vergleicht er ja die falschen "Buttons" :)
 

V_Fynn03

Mitglied
Ok hab ich hinzugefügt, nur jetzt noch, wie genau muss ich den JButton den jetzt bezeichnen beim ActionListener? Doch einfach nur jb2 oder?
 

mihe7

Top Contributor
Ja, nachdem Dein JButton jb2 heißt... Übrigens: gewöhne Dir am besten von Anfang an, vernünftige Bezeichner zu verwenden. "jb2" ist absolut nichtssagend.

Noch eine Ergänzung zum ActionListener: bei einem objektorientierten Ansatz würde jeder Button seinen ActionListener bekommen und nicht für alle Buttons der gleiche verwendet.
 

V_Fynn03

Mitglied
Java:
public void actionPerformed(ActionEvent e) {
        if (e.getSource()==jb2) {
            int pktnr = new Integer(jtf2.getText());
            int b = new Integer (jtf1.getText());

            bank.einzahlen(pktnr , b);
          

        }
      
    }


Java:
jb2 = new JButton();
        jb2.setBounds(350,170,160,60);
        jb2.setText("Einzahlen");
        jb2.addActionListener(this);
        add (jb2);
So richtig?
 

V_Fynn03

Mitglied
Ok ich habe beim falschen Kommentar geguckt, wie update ich denn den Text in meiner GUI? Ich möchte, wenn ich die Bank inspiziere den Kontostand dann sehen mit dem dazugekommenem Geld. Normal kann ich das auch schon, nur wenn ich das nun versuche über die GUI zu überweisen verändert sich nichts, also der Betrag wird irgendwie nirgendwo draufgebucht.
 

mihe7

Top Contributor
Normal kann ich das auch schon, nur wenn ich das nun versuche über die GUI zu überweisen verändert sich nichts, also der Betrag wird irgendwie nirgendwo draufgebucht.
Der wird schon draufgebucht, nur der Kontostand wird nicht angezeigt. Für den Kontostand hast Du doch einen Button: jb4.

Im ActionListener musst Du also, wenn jb4 gedrückt wurde, den Kontostand vom Konto lesen und dann die betreffende Komponente in der GUI aktualisieren. In welchem "Feld" soll der Kontostand denn angezeigt werden? Bei Textfeldern und Labels kannst Du setText verwenden, um die Ausgabe zu aktualisieren.
 
X

Xyz1

Gast
Moin so sollte es funktionieren
Java:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Bank {
	class Konto {
		private int pin = 1234;
		private int stand = 0;
		private int v_nr;

		Konto(int p_nr) {
			v_nr = p_nr;
		}

		int getktnr() {
			return v_nr;
		}

		void einzahlen(int b) {
			stand += b;
		}

		void auszahlen(int b) {
			stand -= b;
		}

		boolean getPinok(int ppin) {
			return pin == ppin;
		}
	}

	class Layout extends JFrame implements ActionListener {
		private static final long serialVersionUID = 1L;
		private Bank bank = new Bank();
		private String[] s = { "Einzahlen", "Auszahlen", "Überweisung", "Kontostand", "Pin", "Changepin" };
		private JButton[] jb = new JButton[s.length];
		private JTextArea jtf1, jtf2, jtf3, jtf4, jtf5; // Deklaration eines Objektes aus der Klasse JTextField
		private JButton jb1, jb2, jb3, jb4, jb5, jb6;
		private Font f;

		Layout() {
			super("BankLayout"); // ruft den Konstruktor der Oberklasse (JFrame) auf
			
			setLayout(null); // schaltet Layout Manager aus
			setBounds(300, 300, 1100, 700); // (x,y Breite,Höhe) vom Fenster
			getContentPane().setBackground(new Color(198, 44, 58)); // RGB
			jtf1 = new JTextArea(); // Instanziieren eines neuen Objekts der Klasse JTextField
			f = new Font("Roman", 1, 20);
			jtf1.setFont(f);
			jtf1.setText("");
			jtf1.setEditable(true);
			jtf1.setBounds(680, 300, 145, 60); // am Objekt selber wird Methode aufgerufen
			add(jtf1); // fügt Objekt dem Cont ainer (=ContentPane) hinzu
			
			jtf2 = new JTextArea(); // Instanziieren eines neuen Objekts der Klasse JTextField
			jtf2.setFont(f);
			jtf2.setText("");
			jtf2.setEditable(true);
			jtf2.setBounds(100, 250, 145, 60); // am Objekt selber wird Methode aufgerufen
			add(jtf2); // fügt Objekt dem Container (=ContentPane) hinzu

			jtf3 = new JTextArea();
			jtf3.setFont(f);
			jtf3.setText("");
			jtf3.setEditable(true);
			jtf3.setBounds(100, 350, 145, 60); // am Objekt selber wird Methode aufgerufen
			add(jtf3);

			jtf4 = new JTextArea();
			jtf4.setFont(f);
			jtf4.setText("Kontonummer");
			jtf4.setEditable(false);
			jtf4.setBounds(100, 170, 145, 60);
			add(jtf4);

			jtf5 = new JTextArea();
			jtf5.setFont(f);
			jtf5.setText("Pin eingeben");
			jtf5.setEditable(false);
			jtf5.setBounds(100, 430, 145, 60);
			add(jtf5);
			setVisible(true);

			jb1 = new JButton();
			jb1.setBounds(350, 100, 160, 60);
			jb1.setText("Abheben");
			jb1.addActionListener(this);
			add(jb1);

			jb2 = new JButton();
			jb2.setBounds(350, 170, 160, 60);
			jb2.setText("Einzahlen");
			jb2.addActionListener(this);
			add(jb2);

			jb3 = new JButton();
			jb3.setBounds(350, 240, 160, 60);
			jb3.setText("Überweisung");
			jb3.addActionListener(this);
			add(jb3);

			jb4 = new JButton();
			jb4.setBounds(350, 310, 160, 60);
			jb4.setText("Kontostand");
			jb4.addActionListener(this);
			add(jb4);

			jb5 = new JButton();
			jb5.setBounds(350, 380, 160, 60);
			jb5.setText("Pin");
			jb5.addActionListener(this);
			add(jb5);

			jb6 = new JButton();
			jb6.setBounds(350, 450, 160, 60);
			jb6.setText("Change Pin");
			jb6.addActionListener(this);
			add(jb6);

			setResizable(false);
			setDefaultCloseOperation(3); // schließen und alle Prozesse beenden
			setVisible(true); // schaltet ganzen JFrame auf SICHTBAR
		}

		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == jb[2]) {
				int pktnr = Integer.parseInt(jtf2.getText());
				int b = Integer.parseInt(jtf1.getText());

				bank.einzahlen(pktnr, b);
			}
			if (e.getSource() == jb[1]) {
				int pktnr = Integer.parseInt(jtf2.getText());
				int b = Integer.parseInt(jtf1.getText());
				int ppin = Integer.parseInt(jtf3.getText());

				bank.auszahlen(pktnr, ppin, b);
			}
		}
	}

	private Konto[] kto = new Konto[5];
	private int ppin, pktnr;

	public Bank() {
		for (int i = 0; i < 5; i++) {
			kto[i] = new Konto(i);
		}
	}

	public Konto FindeKonto(int pktnr) {
		for (int i = 0; i < kto.length; i++) {

			if (pktnr == kto[i].getktnr())
				return kto[i];
		}
		return null;
	}

	public void einzahlen(int pktnr, int b) {
		Konto dummy = FindeKonto(pktnr);

		dummy.einzahlen(b);
	}

	public void auszahlen(int pktnr, int ppin, int b) {
		Konto dummy = FindeKonto(pktnr);
		if (dummy.getPinok(ppin)) {
			dummy.auszahlen(b);
		}
	}

	public void überweisen(int fktnrAbheben, int pktnrEinzahlen, int ppin, int b) {
		for (int i = 0; i < kto.length; i++) {
			if (pktnrEinzahlen == kto[i].getktnr()) {
				kto[i].einzahlen(b);
			}
			if (fktnrAbheben == kto[i].getktnr() && kto[i].getPinok(ppin)) {
				kto[i].auszahlen(b);
			}
		}
	}

	public static void main(String[] args) {
		Layout layout = new Bank().new Layout();
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
F JButton.setEnabled() funktioniert nicht Java Basics - Anfänger-Themen 2
Hilde22 Neu Start JButton einfügen Java Basics - Anfänger-Themen 2
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
M JButton setBackground() färbt nicht den ganzen Knopf Java Basics - Anfänger-Themen 4
C JButton reagiert nicht auf actionListener Java Basics - Anfänger-Themen 15
G jButton führt Main Methode nicht richtig aus Java Basics - Anfänger-Themen 3
J Jbutton blinkt Java Basics - Anfänger-Themen 5
E JButton und JTextField Java Basics - Anfänger-Themen 1
J Erste Schritte if Abfrage von JButton in 2. Klasse Java Basics - Anfänger-Themen 27
J Erste Schritte Actionlistener für tbar/ JButton Java Basics - Anfänger-Themen 15
krgewb Icon von JButton ändern Java Basics - Anfänger-Themen 1
P JButton -Arrays Java Basics - Anfänger-Themen 4
A JButton in anderer Klasse bearbeiten. Java Basics - Anfänger-Themen 2
L Erste Schritte JButton reagiert nicht Java Basics - Anfänger-Themen 5
S Bild über JButton legen Java Basics - Anfänger-Themen 3
V Einem JButton anweisungen geben Java Basics - Anfänger-Themen 4
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
F Interface JButton von anderer Klasse hinzufügen Java Basics - Anfänger-Themen 2
J JButton macht was er will Java Basics - Anfänger-Themen 3
D JButton soll Farbe von JTextfield ändern Java Basics - Anfänger-Themen 5
H JButton - Wechsel der Textfarbe alle 500ms Java Basics - Anfänger-Themen 10
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
N JButton anpassen Java Basics - Anfänger-Themen 3
S JButton soll für bestimmte Zeit verschwinden Java Basics - Anfänger-Themen 5
schoenosrockos JButton füllt immer das ganze frame Java Basics - Anfänger-Themen 1
D JButton in JDialog mit Action belgen Java Basics - Anfänger-Themen 6
V JButton einer anderen Klasse übergeben? Java Basics - Anfänger-Themen 6
F JButton [] mit Werten hinterlegen Java Basics - Anfänger-Themen 10
M Code um per jButton ein neues Fenster zu öffnen Java Basics - Anfänger-Themen 3
A weiter JButton Fehler Java Basics - Anfänger-Themen 3
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
S JCombobox und JButton verknüpfen Java Basics - Anfänger-Themen 6
V wie kann ich eine Schleife pausieren, bis ein Jbutton gedrückt wird ? Java Basics - Anfänger-Themen 17
N Erste Schritte JButton reagiert nur einmal. Java Basics - Anfänger-Themen 12
S JButton Java Basics - Anfänger-Themen 2
A Farben wechseln mit JButton Java Basics - Anfänger-Themen 2
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
F Funktion eines JButton in einen Vektor verlagern Java Basics - Anfänger-Themen 4
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
A Labels Inner JButton Event Erstellbar? Java Basics - Anfänger-Themen 3
K JButton alles zurücksetzen Java Basics - Anfänger-Themen 1
U JButton: Beschriftung ueber Variable zuweisen Java Basics - Anfänger-Themen 6
S JButton erscheint erst bei Mouseover Java Basics - Anfänger-Themen 10
S JButton mit ActionListener Java Basics - Anfänger-Themen 5
S JDK installieren JButton BorderPoints?! Java Basics - Anfänger-Themen 7
E Problem mit erben von JButton Java Basics - Anfänger-Themen 7
J Bei Hinzufügen von JButton Programm langsam Java Basics - Anfänger-Themen 3
J Verknüpfung von JButton to JTextField Java Basics - Anfänger-Themen 4
S Jbutton per Passworteingabe aktivieren Java Basics - Anfänger-Themen 2
G über JButton Action einen anderen Button verändern Java Basics - Anfänger-Themen 7
H JButton - Icon(.png) aus resources laden Java Basics - Anfänger-Themen 23
M Hintergrundbild für JButton Java Basics - Anfänger-Themen 6
A jbutton - icon linksbündig, text zentriert Java Basics - Anfänger-Themen 10
M Input/Output JFrame mit JButton und JTextfield Java Basics - Anfänger-Themen 114
J Hilfe bei JButton Java Basics - Anfänger-Themen 6
A JButton[] und String[] in doppelter For-Schleife Java Basics - Anfänger-Themen 4
W JButton in gleiche Größe bringen Java Basics - Anfänger-Themen 4
pg1337 JButton zuschneiden Java Basics - Anfänger-Themen 3
T Modales JDialog schliessen mit JButton Java Basics - Anfänger-Themen 2
D JButton Array setBackground Java Basics - Anfänger-Themen 2
F JButton wie selektierter JTabbebPane-Header Java Basics - Anfänger-Themen 7
G jButton bei Klick String +1 Java Basics - Anfänger-Themen 5
C OOP Java JButton mit Funktion belegen Java Basics - Anfänger-Themen 3
S JButton wird nicht angezeigt Java Basics - Anfänger-Themen 14
C JButton.getIcon() != null Java Basics - Anfänger-Themen 3
E JButton-Text wird in Schleife nicht geändert Java Basics - Anfänger-Themen 4
F welches Layout für JButton-Liste verwenden Java Basics - Anfänger-Themen 6
T JButton Text ändern Java Basics - Anfänger-Themen 4
L JButton erscheint nur mit pack() Java Basics - Anfänger-Themen 3
U Passwort auf JButton setzen. Java Basics - Anfänger-Themen 2
E JButton Hintergrund / Rahmen entfernen? Java Basics - Anfänger-Themen 4
L Bild auf einem JButton Java Basics - Anfänger-Themen 4
K JButton.setText Problem Java Basics - Anfänger-Themen 6
M JButton und DisabledIcon Java Basics - Anfänger-Themen 2
K jButton zur Laufzeit hinzufügen Java Basics - Anfänger-Themen 22
A GUI - JButton problem! Java Basics - Anfänger-Themen 5
M JButton selbst nachprogrammieren Java Basics - Anfänger-Themen 3
A JButton Textrahmen Java Basics - Anfänger-Themen 7
A Platzierung eines JButton Java Basics - Anfänger-Themen 4
D JButton oder ImageIcon klickt "langsam" Java Basics - Anfänger-Themen 5
E JButton klassenübergreifend nutzen? Java Basics - Anfänger-Themen 6
R Liste graphischer Objekte z.B. JButton dynamisch erstellen Java Basics - Anfänger-Themen 13
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
S JButton trotz Box-Layout skalieren Java Basics - Anfänger-Themen 6
P JButton identifizieren Java Basics - Anfänger-Themen 8
K Funktion zu einem JButton hinzufügen Java Basics - Anfänger-Themen 27
D HTML Text von jButton disablen Java Basics - Anfänger-Themen 2
E Auf JButton in Arraylist zugreifen Java Basics - Anfänger-Themen 6
E Andere Form eines JButton Java Basics - Anfänger-Themen 17
A JButton ActionListener nach einmaligem Ausführen zurücksetzen Java Basics - Anfänger-Themen 13
B JButton Größe einstellen? Java Basics - Anfänger-Themen 3
E Zeilenumbruch in JButton mit Variable Java Basics - Anfänger-Themen 2
A JButton erscheint nicht (BlueJ) Java Basics - Anfänger-Themen 2
M JButton sieht komisch aus :-) Java Basics - Anfänger-Themen 5
B JPanel über JButton umändern Java Basics - Anfänger-Themen 9
D JButton transparent bekommen? Java Basics - Anfänger-Themen 5
H JButton Unsichtbar Java Basics - Anfänger-Themen 7
R JTextField mittels JButton in Konsole ausgeben Java Basics - Anfänger-Themen 2
J Variable die bei JButton Clicks mitzählt Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben