# Durch druecken eines Buttons ein neues Fenster oeffnen



## Pudelchen (15. Nov 2004)

Hallo, habe zwei Programme geschrieben, ein Programm das einen Wert berechnet. und eins dass Einen Graphen ausgiebt.
Ich will diese beiden jetzt verbinden damit ich nur noch den Button graph druecken muss und dann das fenster mit dem Graph automatisch   aufgeht. Habe schon einen actionslistner fuer den button geschrieben. Aber der GRaph wird dadurhc immer im gleichen fenster angezeigt wo die Berechnung stattfindet. Und die beiden Dinge ueberlappen sich. was muss ich aendern?


----------



## L-ectron-X (15. Nov 2004)

Eine Klasse schreiben, z.B. von JDialog abgeleitet, die den Graph in einem geeigneten Container einbettet.
Von dieser Klasse bei Buttonklick eine Instanz erzeugen und anzeigen.


----------



## Pudelchen (15. Nov 2004)

Gibt es da noch ne anfaengerfreundlichere Loesung? 
Mir sagt dass  mit dem "in einem geeigneten Container einbettet" rein garnichts.
Sorry


----------



## L-ectron-X (15. Nov 2004)

Zunächst mal bin ich mir nicht mal sicher, ob das hier ins Applet-Forum hinein passt.
Handelt es sich um ein Applet? Was für ein Fenster, möchtest Du öffnen?
Ich frage jetzt nur, um Missverständnisse zu vermeiden.
Was ein Container ist, dachte ich, wäre Dir bereits ein Begriff. Na gut dann eben noch nicht, ist auch nicht weiter schlimm. Ich versuche es mal kurz zu erklären.
Mit Container meinte ich eine Klasse, die irgendwo in der Vererbungshierachie unterhalb von java.awt.Container zu finden ist. Also z.B. ein (J)Panel. Auf diesem Panel kannst Du Deinen Graph zeichnen und zu einem weiteren Container z.B. einem (J)Dialog hinzufügen. Vorraus gesetzt, dass wir hier jetzt nicht von Applets reden.


----------



## Pudelchen (16. Nov 2004)

Also. Es handelt sich um ein applet. Man muss sich dass so vorstellen:
Im Explorer geh ein Fenster auf. Dort befindet sich ein Button Graph. Wenn man diesen drueckt soll ein Graph erscheinen. Kenn auch im selben Fenster sein. 

```
Graphen.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    Hilf = new Bla();
  }
});
```
So lauten meine Zeilen. Bla ist die Klasse wo der Graph entsteht und Hilf ein Objekt vom Typ Bla.
Was fehlt?


----------



## L-ectron-X (16. Nov 2004)

Du kannst den Graphen entweder in einer neuen Webseite, der gleichen Webseite oder einem sich öffnenden Dialog-Fenster darstellen. Nun weiß ich nicht, welche Lösung Du für Dein Programm vorgesehen hast.
Wenn Du aber, wie angesprochen, den Graphen auf der gleichen Webseite anzeigen willst, brauchst Du dafür eine Anzeigefläche, also ein weiteres Applet. Wenn man mehrere Applets auf einer Webseite eingebunden hat, können sie natürlich miteinander kommunizieren. Das Applet, welches den Button enthält weist das zweite Applet an, den Graphen zu zeichnen. So ungefähr kann man sich das vorstellen.
Ein bisschen von Deinen Vorstellungen musst Du schon noch Preis geben, damit ich weiß, was Du machen möchtest bzw. wie es aussehen soll. :wink:


----------



## Pudelchen (16. Nov 2004)

Am besten waer es wenn sich ein dialogfenster oeffnen wuerde, dass man auch selbststaendig wieder schliessen kann. (aber ich bin erstmal froh wenn es ueberhaupt aufgeht.)


----------



## L-ectron-X (16. Nov 2004)

Du kannst eine eigene Klasse schreiben, die von Frame oder Dialog erbt und dort den Graphen einsetzen.
Bei Klick auf den Button im Applet wird dies Fenster dann aufgerufen und angezeigt.
Ich habe hier mal eine Variante geschrieben, die Du innerhalb Deiner actionPerformed()-Methode für deinen Button einsetzen kannst. Der Frame wird hier lokal erzeugt und ist daher in der Applet-Klasse nicht wo anders verwendbar.


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

public class MyApplet extends Applet {
   private Button b;
   //private Bla graph; //wird irgendwo im Applet erzeugt
   
   public void init() {
      b = new Button("Drück mich");

      b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            final Frame f = new Frame("Graph");
            f.setSize(240, 160);
            f.setLocationRelativeTo(null);
            //Graphen hier einsetzen
            //z.B. f.add(graph);
            f.addWindowListener(new WindowAdapter() {
               public void windowClosing(WindowEvent we) {
                  f.setVisible(false);
               }
            });
            f.setVisible(true);
         }
      });
      
      add(b);
   }
}
```


----------

