# Java 1.0 AWT.Frame schliessen



## MyKron (3. Sep 2004)

Halloele ich bin der Neue und komme jetzt oefters. 

Ich habe mich schon ein wenig umgeschaut, aber leider nichts pasendes gefunden

Also hier ist der Code, die Frage folgt:

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

public class elektronenDrift1 
	extends java.applet.Applet 
	implements MouseListener
{
    public void init()
    {
		setSize(650,400);
		setBackground(Color.white);
		Label label = new Label("Label");
		label.addMouseListener(this);
		add(label);
		label.setLocation(50, 75);        
    }
   	
    public void mouseEntered(MouseEvent evt){
	    Frame1 frame = new Frame1();
    }
    public void mouseExited(MouseEvent evt){
    }
    public void mousePressed(MouseEvent evt){}
    public void mouseReleased(MouseEvent evt){}
    public void mouseClicked(MouseEvent evt){}
}

class Frame1 extends Frame {
    public Frame1() {
        setBounds(300,300,200,200);
        //setUndecorated(true);
        setVisible(true);
    }
   public boolean handleEvent(Event e) {
    	if (e.id == Event.WINDOW_DESTROY)
    	//setVisible(false);
    	dispose();
    	return super.handleEvent(e);
  }
```

Wenn ich dieses Applet ausfuehre, kann ich mit einem MouseOver einen Frame starten, soweit, sogut. Im Moment startet auch unerwuenschter Weise immer ein Neuer, wenn ich erneut ueber das Label gehe (bekomm ich aber bestimmt alleine weg). Mein Problem ist, dass sich der Frame doch am besten beim verlassen des Labels (mouseExited)  sofort wieder schliessen sollte. Ich habe einfach keine Idee wie ich das hinbekomme.

P.S.:
Ich bin doch noch ziemlich neu in Java, also bitte nachsichtig sein, wenn ich das Offensichtliche uebersehe.


----------



## guenni81 (3. Sep 2004)

Wenn du den Frame schließen möchtest, kannst du dies mit this.dispose() tun.


----------



## MyKron (3. Sep 2004)

Vielen Dank, nur wie sage ich der Methode mouseExited, dass doch bitte ein Fenster, dass von einer anderen Klasse erstellt wurde geschlossen werden soll?

this.dispose()  ist ja in der classe in der mouseExited zu Hause ist gar nicht bekannt.


----------



## guenni81 (3. Sep 2004)

Du musst ja eine Instanz von dem Fenster erstellen.
Versuche es mal mit Name.dispose();
Wenn du versuchst einen ToolTip zu erstellen kann ich dir mitteilen das dies auch einfacher geht.
Siehe hier: http://www.galileocomputing.de/open...sel_150007.htm#Rxxjavainsel_150007256Tooltips


----------



## MyKron (4. Sep 2004)

Dank dir, die Tooltip Methode von JFrame kenne ich , aber leider hab ich dann kein Java 1.0 mehr, weil ich swing benutzen müsste, soll aber explizit Java 1 kompatibel sein.

name.dispose(), geht leider auch nicht,. ich habe jetzt den genauen fehler nicht im Kopf. Wenn ich wieder dran sitze, werde ich ihn posten. Vielelicht compilierst du den code auch kurz selber, er ist so vollständig.


----------



## foobar (4. Sep 2004)

```
import java.awt.*;
import java.awt.event.*;
public class elektronenDrift1 extends java.applet.Applet implements MouseListener
{
	private Frame1 frame;
	public void init()
	{
		setSize(650, 400);
		setBackground(Color.white);
		Label label = new Label("Label");
		this.frame = new Frame1();
		label.addMouseListener(this);
		add(label);
		label.setLocation(50, 75);
	}
	public void mouseEntered(MouseEvent evt)
	{
		this.frame.setVisible(true);
	}
	public void mouseExited(MouseEvent evt)
	{
		this.frame.setVisible(false);
	}
	public void mousePressed(MouseEvent evt)
	{}
	public void mouseReleased(MouseEvent evt)
	{}
	public void mouseClicked(MouseEvent evt)
	{}
}
class Frame1 extends Frame
{
	public Frame1()
	{
		setBounds(300, 300, 200, 200);
		//setUndecorated(true);
	}
	public boolean handleEvent(Event e)
	{
		if (e.id == Event.WINDOW_DESTROY)			//setVisible(false);
			dispose();
		return super.handleEvent(e);
	}
}
```


----------



## MyKron (4. Sep 2004)

Tja, was soll ich sagen.

Ich bin halt wirklich neu, was kann ich tun, damit ich von Java genug verstehe um soetwas selber Programmieren zu können. 

Wie ich sehe, hatte ich ja wohl noch ein paar Grundsätzlich andere "Fehler" in dem Code. Ich habe im Moment gerade die Hälfte des Markt und Technik Buches "Java in 21 Tagen" durch. Ich dachte, dass ich langsam beginne Java zu verstehen, zumindest kann ich inzwischen fremden Code lesen, aber vom selber erstellen bin ich sooo weit entfernt.

Danke jedenfalls!


----------



## L-ectron-X (4. Sep 2004)

Das Java-Event-Handling von Java 1.0 brauchst Du Dir gar nicht mehr ansehen und lernen, das macht kein Mensch mehr. Zumindest solltest Du es Dir nicht zu fest einprägen.


----------



## MyKron (21. Sep 2004)

Das eventhandling brauch ich ja, dank dieser netten lösung auch nicht mehr.
Aber leider scheint bei mir der groschen noch nciht gefallen zu sein. 
Ich habe jetzt auf dieser Basis zwei Tooltipfenster erstellt die beide verschieden sind und die gleiche Klasse nutzen. Ist das bis hierhin erstmal richtig gedacht??

So, jetzt würde ich gerne in jedes Fenster  auch einen inhalt packen. Dabei ist es mir egal, ob ein Bild, ein paar LAbels, oder den Inhalt einer Datei, z.B. eine HTML-Seite,. Irgendwie scheiterten alle Versuche bisher mit der Darstellung im Applet und nicht im entsprechenden Frame. Wie geht man da am besten vor??


----------



## foobar (21. Sep 2004)

> So, jetzt würde ich gerne in jedes Fenster auch einen inhalt packen.


Komponenten zu einem Frame oder einem Applet hinzufügen, kannst du mit der add-Methode:

```
public void init()
   {
      setSize(650, 400);
      setBackground(Color.white);
      this.frame = new Frame1();
     Label label = new Label("Label");  // Label erstellen
      label.addMouseListener(this);
      add(label);                                // Label dem Container hinzufuegen
      label.setLocation(50, 75);      
   }
```


----------



## MyKron (11. Okt 2004)

Danke, aber das ist schon klar. Das problem ist aber, dass ich gerne verschiedene inhalte in den frame packen wuerde, das durch ein und die selbe klasse erstellt wird. Folgenden code habe ich:


```
[...]
        private Label energieAbhaengig;
        private Label energieUnabhaengig;

        public Label newLabel(Label label, String s)
       {
  		label = new Label(s);
	        add(label);
		return label;
	}

        energieAbhaengig = newLabel(energieAbhaengig, "Energie abhaengig");
        this.frame = new ToolTip("Energie abhaengig");
        energieAbhaengig.addMouseListener(this);
        energieAbhaengig.setLocation(588,443);

        energieUnabhaengig = newLabel(energieUnabhaengig, "Energie unabhaengig");
        this.frame2 = new ToolTip("Energie unabhaengig");
        energieUnabhaengig.addMouseListener(this);
	energieUnabhaengig.setLocation(588,464

[...]

public void mouseEntered(MouseEvent evt)
    {
        if(evt.getSource()==energieAbhaengig)
        {
			this.frame.setVisible(true);
		}
        else
        if(evt.getSource()==energieUnabhaengig)
        {
            this.frame2.setVisible(true);
		}
   }
  public void mouseExited(MouseEvent evt)
   {
        if(evt.getSource()==energieAbhaengig)
        	this.frame.setVisible(false);
        else
        if(evt.getSource()==energieUnabhaengig)
            this.frame2.setVisible(false);
   }

[...]

class ToolTip extends Frame
{
	private Label energieAbhaengig;
	public ToolTip(String title)
	{
		super(title);
		setBounds(400, 150, 350, 250);
		setUndecorated(true);
		setResizable(false);
	}
}
```


So. Am liebsten waere es mir jetzt, wenn ich der Klasse ToolTip, einen string uebergeben koennte, der den namen einer html seite enthaelt (liegt im gleichen verzeichnis, wie das applet). diese html seite sollte dann in den entsprechenden fenster dargestellt werden. Es waere aber auch nicht schlimm, wenn in dem frame nur labels vorhanden waeren, der inhalt soll nur kurze erlauterungen erntalten. villeicht wird meine frage jetzt ein wenig klarer, ich bin noch nicht so weit um das selber zu loesen, sorry.


----------

