Java GUI Programmierfehler

bennemann8

Cadet 2nd Year
Registriert
Okt. 2010
Beiträge
21
Hey Leute,
ich hab ein Problem und zwar soll ich für ein Portfolio-Projekt eine GUIerstellen, indem man sich
simpel mit einem Name einloggen soll, man danach weitergeleitet wird in den "Adminbereich".
Jetzt wollte ich das Ganze OOP basiert schreiben, bekomme aber keine Ausgabe..
Wenn ich alles in die Main "klatsche" funktionierts..
Habt ihr n' Idee woran es liegen könnte?

Quellcode meiner Main:
Code:
package gui;
public class GUI {
    public static void main(String[] args) {
      MeinGUI test = new MeinGUI();
    }
}

Quellcode meiner MeinGUI:
Code:
package gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.awt.*;


public final class MeinGUI implements ActionListener{
    JLabel label1 = new JLabel();
    JTextField field1;
    JButton button1;
    JButton suchen;
    JButton bearbeiten;
    JButton hinzufügen;
    JButton löschen;
    JButton vergeben;
    JButton stornieren;
    JButton anzeigen;
    JButton freigeben;
    JButton k_löschen;
    JFrame frame1 = new JFrame();
    JFrame frame2 = new JFrame();

    public MeinGUI() {
        Frame1();
        Frame2();
    }
    

    @Override
    public void actionPerformed(ActionEvent evt) {
        JButton source = (JButton) evt.getSource();
        if(source.equals(button1) && "AUTHORISIERTER NAME".equals(field1.getText())){
            frame1.remove(button1);   
            frame1.setVisible(false); 
            frame2.setVisible(true);
        }else{
            label1.setText("Kein gültiger Benutzer!");
            frame1.add(label1);
            frame1.repaint();
        }
    }
    
   public void Frame1(){
       frame1.setLayout(null);
       frame1.setSize(250,150);
       
       button1 = new JButton("Klick mich!");
       field1 = new JTextField(10);
       label1 = new JLabel();
       
       label1.setBounds(10, 60, 200, 30);
       button1.setBounds(120,20,100,25);
       field1.setBounds(10,20,100,25);
       
       frame1.add(field1);
       frame1.add(button1);
       
       button1.addActionListener(new MeinGUI());
       
       frame1.setVisible(true);
       frame1.setResizable(false);
       frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }
   
   public void Frame2(){
       frame2.setLayout(null);
       frame2.setSize(800,600);
       
       label1 = new JLabel();
       suchen = new JButton("Mitglied suchen");
       bearbeiten = new JButton("Mitglied bearbeiten");
       hinzufügen = new JButton("Mitglied hinzufügen");
       löschen = new JButton("Mitglied löschen");
       vergeben = new JButton("Karten vergeben");
       anzeigen = new JButton("vergeben Karten anzeigen");
       stornieren = new JButton("Karte stornieren");
       freigeben = new JButton("Kontingent erhöhen");
       k_löschen = new JButton("Kontingent löschen");
       
       label1.setText("Administrationsbereich");
       label1.setBounds(40,20,500,40);
       label1.setHorizontalAlignment(SwingConstants.CENTER);
       
       suchen.setBounds(20, 50, 120, 25);
       bearbeiten.setBounds(20, 80, 120, 25);
       hinzufügen.setBounds(20, 110, 120, 25);
       löschen.setBounds(20, 140, 120, 25);
       vergeben.setBounds(150, 170, 120, 25);
       anzeigen.setBounds(150, 200, 120, 25);
       stornieren.setBounds(150, 230, 120, 25);
       freigeben.setBounds(150, 260, 120, 25);
       k_löschen.setBounds(150, 290, 120, 25);
       
       frame2.add(label1);
       frame2.add(suchen);
       frame2.add(bearbeiten);
       frame2.add(hinzufügen);
       frame2.add(löschen);
       frame2.add(vergeben);
       frame2.add(anzeigen);
       frame2.add(stornieren);
       frame2.add(freigeben);
       frame2.add(k_löschen);
       
       frame2.setVisible(false);
       frame2.setResizable(false);
       frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
    }
}
 
Lösche das implements ActionListener sowie deren Methode actionPerformed() und beschreibe die Button Funktion folgendermaßen:

button1.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent evt) {
JButton source = (JButton) evt.getSource();

if(source.equals(button1) && "AUTHORISIERTER NAME".equals(field1.getText())){
frame1.remove(button1);
frame1.setVisible(false);
frame2.setVisible(true);
}
else
{
label1.setText("Kein gültiger Benutzer!");
frame1.add(label1);
frame1.repaint();
}

}

});

dann sollte es funktionieren :D
 
Schmeiß bei sowas doch einfach mal einen debugger an, dann siehst du, dass
Code:
button1.addActionListener(new MeinGUI());
dir logischerweise eine Endlosschleife beschert.
 
Alternativ kannst du auch anstatt button.addActionListener(new meinGui()) button.addActionListener(this) benutzen.
 
IamDiesel schrieb:
Lösche das implements ActionListener sowie deren Methode actionPerformed() und beschreibe die Button Funktion folgendermaßen:

button1.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent evt) {
JButton source = (JButton) evt.getSource();

if(source.equals(button1) && "AUTHORISIERTER NAME".equals(field1.getText())){
frame1.remove(button1);
frame1.setVisible(false);
frame2.setVisible(true);
}
else
{
label1.setText("Kein gültiger Benutzer!");
frame1.add(label1);
frame1.repaint();
}

}

});

dann sollte es funktionieren :D

danke (; funktioniert!
 
Wie Tumbleweed schon richtig gesagt hast produzierst du durch
Code:
button1.addActionListener(new MeinGUI());
eine Endlosschleife.
new MeinGui() ruft den Konstruktor von MeinGui auf und erstellt dir ein neues Objekt.
Der Konstruktor ruft die Methoden Frame1() und Frame2() auf, welche wiederum folgenden Code ausführen:
Code:
button1.addActionListener(new MeinGUI());
->du siehst? :D Endlosschleife.
Anstatt also ein neues Objekt für den ActionListener anzulegen übergibt jedes angelegte Objekt sich selbst per this:
Code:
button1.addActionListener(this);
 
Zurück
Oben