# Mit Klick auf Button ein neues Fenster erzeugen



## Dieter_Bohlen (23. Apr 2015)

Hallo,

ich bin ein Java-Anfänger und möchte etwas zum Üben programmieren. Ich habe ein Fenster programmiert, welches drei Buttons anzeigt: Quadrat, Kreis, Dreieck. Wenn man auf eines klickt, dann soll sich die jeweilige Form in einem neuen Fenster öffnen und daran bin ich gerade am verzweifeln. Hat jemand eine Idee, wie ich das lösen kann?


----------



## franky27 (23. Apr 2015)

Was hast du denn schon? Und an was hakt es?


----------



## Dieter_Bohlen (23. Apr 2015)

```
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.*;
import java.awt.event.*;


public class Frame extends JFrame {
  JLabel text1;
  JLabel text2;
  JButton button1;
  JButton button2;
  JButton button3;
  
  public Frame() {
    setVisible(true);
    setSize(500, 300);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setTitle("Formen");
    setResizable(false);
    setLayout(null);


    text1 = new JLabel("Wählen Sie eine Form!"); 
    text1.setBounds(120, 20, 500, 40); 
    Font schrift1 = text1.getFont().deriveFont(Font.BOLD + Font.PLAIN, 25); 
    text1.setFont(schrift1);
    add(text1);


    button1 = new JButton("Quadrat");
    button1.setBounds(100, 100, 100, 50);
    add(button1);


    button2 = new JButton("Kreis"); 
    button2.setBounds(200, 100, 100, 50); 
    add(button2);


    button3 = new JButton("Dreieck"); 
    button3.setBounds(300, 100, 100, 50); 
    add(button3);


    text2 = new JLabel("Die gewählte Form wird in einem neuen Fenster gezeigt."); 
    text2.setBounds(95, 180, 500, 40); 
    Font schrift2 = text2.getFont().deriveFont(Font.PLAIN, 12); 
    text2.setFont(schrift2);
    add(text2);
  }
  
}
```


----------



## franky27 (23. Apr 2015)

Ok.. Weisst du wie du ActionListener für die Buttons implementierst und wie due generell Formen zeichnen kannst?


----------



## Dieter_Bohlen (23. Apr 2015)

Die Formen waren kein Problem, aber wie ich den ActionListener implementiere, ist mir ein Rätsel.


----------



## franky27 (23. Apr 2015)

Ok dann sind die ja dein einziges Problem. How to Write an Action Listener (The Javaâ„¢ Tutorials > Creating a GUI With JFC/Swing > Writing Event Listeners)


----------



## Dieter_Bohlen (23. Apr 2015)

Ich habe mir solche Tutorials schon durchgelesen und werde nicht schlauer dadurch. Entweder funktionierte es nicht so, wie es sollte oder es kamen Fehlermeldungen.


----------



## franky27 (23. Apr 2015)

Dann versuch es nochmal zu implementieren, poste dann deinen Code und dann können wir schauen was falsch ist oder was nicht so funktioniert wie es soll. Es bringt dir ja jetzt kaum was wenn dir jemand dein Programm schreibt.


----------



## Dieter_Bohlen (27. Apr 2015)

Ich habe es nun hinbekommen. Nun möchte ich das ganze ein wenig objektorientierter programmieren, aber bekomme immer einen Fehler ausgespuckt:

Compiliere C:\Users\User\Desktop\Formen.java mit Java-Compiler
C:\Users\User\Desktop\Button.java:18:5: error: cannot find symbol
    addActionListener(new Action1());  
    ^
  symbol:   method addActionListener(Action1)
  location: class Button

C:\Users\User\Desktop\Button.java:24:5: error: cannot find symbol
    addActionListener(new Action2());
    ^
  symbol:   method addActionListener(Action2)
  location: class Button

C:\Users\User\Desktop\Button.java:30:5: error: cannot find symbol
    addActionListener(new Action3());
    ^
  symbol:   method addActionListener(Action3)
  location: class Button
3 errors


```
import javax.swing.*; 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.*;
import java.awt.event.*;


public class Button extends JFrame {
  JButton button1;
  JButton button2;
  JButton button3;
  
  public Button() {
    //Der erste Button
    button1 = new JButton("Quadrat"); 
    button1.setBounds(100, 100, 100, 50);
    add(button1);
    addActionListener(new Action1());  
    
    //Der zweite Button
    button2 = new JButton("Kreis"); 
    button2.setBounds(200, 100, 100, 50); 
    add(button2);
    addActionListener(new Action2());
    
    //Der dritte Button
    button3 = new JButton("Dreieck");
    button3.setBounds(300, 100, 100, 50); 
    add(button3);
    addActionListener(new Action3());
  }
  
  static class Action1 implements ActionListener{
    public void actionPerformed(ActionEvent e){
      Quadrat f=new Quadrat();
    }
  }
  
  static class Action2 implements ActionListener{
    public void actionPerformed(ActionEvent e){
      Kreis f=new Kreis();
    }
  }
  
  static class Action3 implements ActionListener{
    public void actionPerformed(ActionEvent e){
      Dreieck f=new Dreieck();
    }
  }  
}
```


----------



## franky27 (27. Apr 2015)

Du musst die ActionListener dem Button hinzufügen, nicht dem frame.
Mach die Klassen ausserdem nicht statisch.


----------



## Dieter_Bohlen (27. Apr 2015)

addActionListener(new Button1());
addActionListener(new Button2());
addActionListener(new Button3());

Oder wie ist das gemeint?


----------



## franky27 (27. Apr 2015)

Nein... 
	
	
	
	





```
button1.addActionListener(new Action1());
```
Ausserdem solltest du deine Klasse nicht Button nennen.
Von JFrame zu erben solltest du auch nicht wenn du es nicht explizit brauchst.


----------

