# Aufruf einer neuen Klasse durch Button-Klick



## Paule (12. Jan 2005)

Hallo,

ich habe folgendes Problem: Ich habe zwei Klassen geschrieben. Die eine soll ein Login-Fenster sein. Wenn ich nun auf den Button "Login" drücke möchte, dass eine neue Klasse angezeigt wird, nämlich das MainWindow. Eben so, wie es auf jeder Internetseite geschieht sobald man sich eingeloggt hat.
Mein Problem: es funktioniert nicht. Ich habe dem Button einen ActionListener hinzugefügt und auch die actionPerformed-Methode geschrieben.
Oder mach ich da grundsätzlich was falsch?
Hier meine beiden Klassen


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.Applet;

public class Login extends Applet implements ActionListener {   
	JLabel username = new JLabel("Nutzername: ");
	JLabel password = new JLabel("Passwort: ");
	JTextField nName = new JTextField(10);
	JPasswordField pwort = new JPasswordField(10);
	JButton login = new JButton("Login");
	JButton reg = new JButton("neu registrieren");
	
	
	
	  public void init() {
	  	setSize(400,200);
	  	
	  	login.addActionListener(this); // Hier füge ich den Listener zu
	  	
	  	JPanel pane = new JPanel();
	  	GridLayout lm1 = new GridLayout(3,2,10,10);
	  	pane.setLayout(lm1);
		pane.add(username);
	    pane.add(nName);
	    pane.add(password);
	    pane.add(pwort);
	    pane.add(login); 
	    pane.add(reg);
	  	setBackground(Color.green);
	  	add(pane);
	  	
	    
	  
	   }
	  public void actionPerformed(ActionEvent evt) {
	  	MainWindow fenster = new MainWindow();
	  	Object source = evt.getSource();
	  	if (source == login)
	  		fenster.init();
	  }
}
```

Nun die Klasse MainWindow


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.Applet;

public class MainWindow extends Applet {
	
	JLabel welcome = new JLabel("Herzlich willkommen Herr ...   ");
	JLabel tListe = new JLabel("Eine Übersicht der vorhanden quizzes");
	JLabel lLabel = new JLabel("");
	JButton nQuiz = new JButton("neues Quiz");
	JButton oQuiz = new JButton("Quiz bearbeiten");
	JButton statistik = new JButton("Statistik");
	JButton nOrdner = new JButton("neuer Ordner");
	JButton logout = new JButton("logout");
	JToolBar bar1 = new JToolBar();
	JToolBar bar2 = new JToolBar();
	JToolBar bar3 = new JToolBar();
	JToolBar bar4 = new JToolBar();
	List liste = new List(5);
	
		public void init() {
			setSize(450, 400);
			
			JPanel pane = new JPanel();
			bar1.add(welcome);
			bar1.add(logout);
			
			bar2.add(nQuiz);
			bar2.add(oQuiz);
			bar2.add(statistik);
			
			bar3.add(tListe);
			
			bar4.add(liste);
			bar4.add(nOrdner);
			
			GridLayout lm1 = new GridLayout(4,1);
		  	pane.setLayout(lm1);
		  	pane.add(bar1);
		  	pane.add(bar2);
		  	pane.add(bar3);
		  	pane.add(bar4);
		  	setBackground(Color.green);
		  	add(pane);
		  	
		}

	
}
```

Für eure Hilfe bedanke ich mich schon einmal im Voraus!!

Gruß Paule!![/code]


----------



## dotlens (13. Jan 2005)

teste mal was gemacht wird wenn du login drückst....
mittels System.out.println("zwischenSchritt") kannst du dir alle paar zeilen ausgeben lassen, obe er es bis hierhin geschafft hat....


----------



## Paule (13. Jan 2005)

Hallo,

erst mal danke. Aber es kann ja nur an der actionPerformed-Methode was falsch sein, denn den Rest der Login-Klasse führt er ja aus. Muss ich evtl noch was importieren oder ne andere Methode des MainWindow aufrufen?

Ich hoffe mir kann jemand helfen, so langsam bin ich echt verzweifelt   

Gruß Paule!!


----------



## dotlens (13. Jan 2005)

du führst die init() methode gar nie aus!

du benötigst einen Konstruktor:

```
Login(){
    super();
    init();
}
```

und das gleiche auch in deiner anderen klasse


----------



## Paule (13. Jan 2005)

Hallo,


```
public class Login extends Applet implements ActionListener {   
	JLabel username = new JLabel("Nutzername: ");
	JLabel password = new JLabel("Passwort: ");
	JTextField nName = new JTextField(10);
	JPasswordField pwort = new JPasswordField(10);
	JButton login = new JButton("Login");
	JButton reg = new JButton("neu registrieren");
	MainWindow fenster = new MainWindow();
	
	
	
	  public void init() {
	  	setSize(400,200);
	  	login.addActionListener(this);
	  	
	  	
	  	JPanel pane = new JPanel();
	  	GridLayout lm1 = new GridLayout(3,2,10,10);
	  	pane.setLayout(lm1);
		pane.add(username);
	       pane.add(nName);
	       pane.add(password);
	       pane.add(pwort);
	       pane.add(login); 
	       pane.add(reg);
	       setBackground(Color.green);
	       add(pane);
	  	
	  	
	    }
	  
public void actionPerformed(ActionEvent evt) {
		MainWindow fenster = new MainWindow();
		fenster.init();
		
		
}

 public Login() {
	super();
	init();
}
	  
}
```

So? Oder wie meinst du das? Sorry bin noch ein blutiger Anfänger. Und irgendwie find ich das ganze ziemlich kompliziert.
Auf jeden Fall tut sich immer noch nichts, wenn ich auf den login-Button klicke.
Wäre nett wenn mir noch jemand nen Tipp geben könnte.

Gruß Paule!!!


----------



## L-ectron-X (13. Jan 2005)

Wir müssen noch eine grundsätzliche Frage klären: Was meinst Du mit Fenster?
Applets werden in einem Bereich des Browserfensters innerhalb einer Webseite ausgeführt. Wenn Du ein eigenständiges Fenster öffnen möchtest, musst Du diese Klasse von JFrame oder JDialog (bei AWT Frame bzw. Dialog) ableiten. 
Wenn Du dagegen eine neue Webseite laden willst, musst Du etwas anders vorgehen.


----------



## Paule (13. Jan 2005)

Hi,

also das Applet soll in eine Lernumgebung im Internet eingebettet werden. Zu Anfang soll im Browser das Login erscheinen. Wenn ich dann alles ausgefüllt habe und auf "login" drücke, soll in dem Bereich, in dem vorher die Login-Klasse zu sehen war, der Inhalt der MainWindow-Klasse erscheinen. Ich möchte also kein neues Fenster öffnen.

Gruß Paule!!


----------



## L-ectron-X (13. Jan 2005)

Ich habe den Code etwas umgestellt. Das Ganze könnte so aussehen:

```
import javax.swing.*;

public class MyApplet extends JApplet {
   private JPanel activeView;
   
   public void init() {
      activeView = new Login(this);
      add(activeView);
   }
   
   public void changeView(JPanel p) {
      remove(activeView);
      activeView = p;
      getContentPane().add(activeView);
      validate();
   }
}
```


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Login extends JPanel implements ActionListener {
   private JLabel username;
   private JLabel password;
   private JTextField nName;
   private JPasswordField pwort;
   private JButton login;
   private JButton reg;
   private MyApplet owner;

   public Login(MyApplet owner) {
      this.owner = owner;

      setLayout(new GridLayout(5,2,10,10));
      setPreferredSize(new Dimension(400, 200));
      
      username = new JLabel("Nutzername: ");
      password = new JLabel("Passwort: ");
      nName = new JTextField(10);
      pwort = new JPasswordField(10);
      login = new JButton("Login");
      reg = new JButton("neu registrieren");
      
      login.addActionListener(this);
      
      add(username);
      add(nName);
      add(password);
      add(pwort);
      add(login);
      add(reg);
   }
      
   public void actionPerformed(ActionEvent evt) {
      if (login == (JButton)evt.getSource())
         owner.changeView(new MainWindow(owner));
   }
}
```


```
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

public class MainWindow extends JPanel {

   private JLabel welcome;
   private JLabel tListe;
   private JLabel lLabel;
   private JButton nQuiz;
   private JButton oQuiz;
   private JButton statistik;
   private JButton nOrdner;
   private JButton logout;
   private JToolBar bar1;
   private JToolBar bar2;
   private JToolBar bar3;
   private JToolBar bar4;
   private JList liste;
   private MyApplet owner;

   public MainWindow(MyApplet owner) {
      this.owner = owner;
      setLayout(new GridLayout(4,1));
      
      welcome = new JLabel("Herzlich willkommen Herr ...   ");
      tListe = new JLabel("Eine Übersicht der vorhanden quizzes");
      lLabel = new JLabel("");
      nQuiz = new JButton("neues Quiz");
      oQuiz = new JButton("Quiz bearbeiten");
      JButton statistik = new JButton("Statistik");
      nOrdner = new JButton("neuer Ordner");
      logout = new JButton("logout");
      liste = new JList();
      
      bar1 = new JToolBar();
      bar2 = new JToolBar();
      bar3 = new JToolBar();
      bar4 = new JToolBar();
      
      bar1.add(welcome);
      bar1.add(logout);

      bar2.add(nQuiz);
      bar2.add(oQuiz);
      bar2.add(statistik);

      bar3.add(tListe);

      bar4.add(new JScrollPane(liste));
      bar4.add(nOrdner);

      add(bar1);
      add(bar2);
      add(bar3);
      add(bar4);
   }
}
```
Fehlende Listener etc. müssten ergänzt werden.


----------



## Paule (13. Jan 2005)

Hallo,

vielen vielen vielen ... Dank. Ich werd das gleich mal ausprobieren und auch versuchen zu verstehen.  :wink: 


Gruß Paule!!!


----------



## Paule (13. Jan 2005)

Hallo nochmal,

tja irgendwie funktioniert das nicht so ganz. Es wird zwar im Quellcode kein Fehler angezeigt (ich benutze Eclipse) aber wenn ich das Applet starten will, kommen ne Menge Fehlermeldungen.
Z.B: "java.lang.Error: Do not use Editor.add() use Editor.getContentPane().add() instead" 
Hat es bei dir denn funktioniert?
Wäre nett wenn du mir da noch mal nen Tipp geben könntest.

Gruß Paule!!!


----------



## L-ectron-X (13. Jan 2005)

Schreibe einfach vor dem Methodenaufruf von add() in der init()-Methode noch _getContentPane()._ davor. Also genau so, wie es in meiner changeView()-Methode zu sehen ist. Ich arbeite mit Java 1.5. Da ist das nicht mehr nötig.


----------



## Paule (13. Jan 2005)

Moin,

ok da hätte ich auch selbst drauf kommen können. Also nochmal vielen Dank jetzt klappts.

Gruß Paule!!!


----------

