# Menü erstellen



## Frank S. (25. Sep 2004)

Hallo, ich habe folgendes Problem.
Ich möchte einfach mal ein kleines Menü erstellen.
Habe dafür folgenden Quelltext :

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

class Menu extends Frame 
{
	MenuBar mbar = new MenuBar();
	window.setMenuBar(mbar);
	Menu myMenu = new Menu("File");
	mbar.add(myMenu);

}
```

wenn ich ihn allerdings compeliere bekomme ich folgenden fehler :

Compile D:\Java\Menu.java....
D:\Java\Menu.java:7: <identifier> expected
	window.setMenuBar(mbar);
                         ^
D:\Java\Menu.java:9: <identifier> expected
	mbar.add(myMenu);
                ^
D:\Java\Menu.java:7: cannot resolve symbol
symbol  : class setMenuBar  
location: package window
	window.setMenuBar(mbar);
              ^
D:\Java\Menu.java:9: cannot resolve symbol
symbol  : class add  
location: package mbar
	mbar.add(myMenu);
            ^
D:\Java\Menu.java:8: cannot resolve symbol
symbol  : constructor Menu  (java.lang.String)
location: class Menu
	Menu myMenu = new Menu("File");
                      ^
5 errors

Compilierung beendet


Woran liegt das und was mache ich hier falsch ??



gruss


Frank


----------



## foobar (25. Sep 2004)

Wie wäre es mit einem Konstruktor?

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

class Menu extends Frame
{
   public Menu()
   {
      MenuBar mbar = new MenuBar();
      window.setMenuBar(mbar);
       Menu myMenu = new Menu("File");
       mbar.add(myMenu);
   }
}
```


----------



## Roar (25. Sep 2004)

es gibt keine variable window


----------



## Frank S. (25. Sep 2004)

HI,
habe es grade mal versucht, bekomme aber folgenden Fehler bei dem Quelltext :


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

class Menu extends Frame 
{ 
   public Menu() 
   { 
      MenuBar mbar = new MenuBar(); 
      window.setMenuBar(mbar); 
      Menu myMenu = new Menu("File"); 
      mbar.add(myMenu); 
   } 
}
```


Fehler :

D:\Java\Menu.java:9: cannot resolve symbol
symbol  : variable window  
location: class Menu
      window.setMenuBar(mbar); 
      ^


D:\Java\Menu.java:10: cannot resolve symbol
symbol  : constructor Menu  (java.lang.String)
location: class Menu
       Menu myMenu = new Menu("File"); 
                     ^

D:\Java\Menu.java:11: add(java.awt.Menu) in java.awt.MenuBar cannot be applied to (Menu)
       mbar.add(myMenu); 
           ^


----------



## Roar (25. Sep 2004)

sieh meinen anderen post! es gibt keine variable "window"
außerdem ist es sehr ungeschickt eine klasse genauso zu nennen wie eine in der j2se, und dann auchnoch die j2se klasse dadrin zu verwenden, nenne deine klasse mal MenuTest oder so. ansonsten denkt der ocmpiler natürlich dein new Menu("Blubb") würde sich auf die aktuelle klasse beziehen.


----------



## abollm (25. Sep 2004)

Nachdem du dir sicherlich das "Roar"-Posting noch einmal genau angeschaut hast, gebe ich dir hier einmal ein _grundsätzlich_ lauffähiges Beispiel mit zwei Menüeinträgen:



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

class MyMenu extends Frame 
{
   MenuBar menuBar;
   public MyMenu() 
   { 
      super("Menütest");
      menuBar = new MenuBar();	
      addWindowListener(new WindowClosingAdapter(true));
      menuBar.add(createMyMenu()); 

   }
   private Menu createMyMenu()
   {
      Menu window = new Menu("Datei");
      setMenuBar(menuBar);
      MenuItem mi1 = new MenuItem("Bla");
      window.add(mi1);
      MenuItem mi2 = new MenuItem("BlaBla");
      window.add(mi2);
      // weitere Einträge können hier folgen ...
      return window;
   }

   public static void main(String[] args)
   {
    MyMenu frame = new MyMenu();
    frame.setLocation(100, 100);
    frame.setSize(400, 300);
    frame.setVisible(true);
   }
}
```

Ansonsten gilt immer die Regel: RTFMs (Mehrzahl beachten!), von denen es wahrlich genug gibt. Schau einmal in die Liste von emfohlenen Bücher-/Tutorial-Links:

http://www.java-forum.org/de/viewtopic.php?t=245


----------



## Frank S. (26. Sep 2004)

Das klingt doch schon gut..besten Dank.
Mein Problem war auch das ich das Beispiel aus einem Buch hatte....
Ich glaube echt das Java mich noch fertig macht...


Gruss und Danke


Frank


----------



## Frank S. (26. Sep 2004)

Habe das Programm grade mal compeliert und es geht irgendiwe nicht :

bekomme folgende Fehler :

Compile D:\Java\MyMenu.java....
D:\Java\MyMenu.java:11: cannot resolve symbol
symbol  : class WindowClosingAdapter  
location: class MyMenu
      addWindowListener(new WindowClosingAdapter(true)); 
                            ^
D:\Java\MyMenu.java:12: add(java.awt.Menu) in java.awt.MenuBar cannot be applied to (Menu)
      menuBar.add(createMyMenu()); 
             ^
D:\Java\MyMenu.java:17: cannot resolve symbol
symbol  : constructor Menu  (java.lang.String)
location: class Menu
      Menu window = new Menu("Datei"); 
                    ^
D:\Java\MyMenu.java:20: cannot resolve symbol
symbol  : method add  (java.awt.MenuItem)
location: class Menu
      window.add(mi1); 
            ^
D:\Java\MyMenu.java:22: cannot resolve symbol
symbol  : method add  (java.awt.MenuItem)
location: class Menu
      window.add(mi2); 
            ^
D:\Java\Menu.java:11: cannot resolve symbol
symbol  : constructor Menu  (java.lang.String)
location: class Menu
      Menu myMenu = new Menu("File"); 
                    ^
D:\Java\Menu.java:12: add(java.awt.Menu) in java.awt.MenuBar cannot be applied to (Menu)
      mbar.add(myMenu); 
          ^
7 errors

Compilierung beende


Hat jemand eine Annung wieso ?


Gruss


Frank


----------



## Roar (26. Sep 2004)

schau mal hier (FAQ): http://www.java-forum.org/de/viewtopic.php?t=3976
da sind die compilerfehler erklärt. danach solltest du die fehler auch beheben können.


----------



## Frank S. (28. Sep 2004)

habe mir die Seite grade mal angeguckt. Sie hilft mir aber nicht richtig weiter.
Ich weiss jetzt zwar was der Fehler bedeutet aber nicht wieso er den ausgibt.
Er sagt er würde die Klasse MyMenu nicht kennen, das kann aber nicht sein. Habe ich vielleicht eine alte Java Version die die Befehle addWindowListener() und so nicht kennt ?


----------



## abollm (28. Sep 2004)

Frank S. hat gesagt.:
			
		

> ...Er sagt er würde die Klasse MyMenu nicht kennen, das kann aber nicht sein. Habe ich vielleicht eine alte Java Version die die Befehle addWindowListener() und so nicht kennt ?



Welche Java-Version hast du denn auf deiner Maschine? Bei mir lässt sich die Datei mit Java 1.3.1 problemlos übersetzen!

Ansonsten übersetze das Programm einmal mit folgendem Befehl:

javac -verbose MyMenu.java

Dann kannst du verfolgen, welche Klassen geladen werden und was der Compiler gerade so macht.

Hth


----------



## Frank S. (28. Sep 2004)

habe auch die Java 1.3.1 version.
Schon komisch oder?
Habe grade den obrigen Quelltext nochmal kopiert und in 
Joe 2 eingefügt.Wenn ich ihn compiliere habe ich aber immer wieder die seleb 7 Fehler.... Ich glaube ich dreh noch durch ;-)


----------



## Frank S. (28. Sep 2004)

Ich habe den Fehler gefunden  :lol: 
Es werden mich ein paar Leute jetzt wahrscheinlich für ziemlich Ahnungslos halten, aber es gab folgendes Problem :
Ich hatte einen ersten Versuch von mir als MENU gespeichert und bei MyMenu wollte er dann natürlich darauf zugreifen und nicht auf die vorgefertigte Klasse MENU.

Das einzige Problem was ich jetzt noch habe ist das ich noch  folgenden Fehler bekomme :

D:\Java\MyMenu.java:11: cannot resolve symbol
symbol  : class WindowClosingAdapter  
location: class MyMenu
      addWindowListener(new WindowClosingAdapter(true)); 
                            ^



Weiss noch jemand Rat ?


Danke 
Frank


----------



## abollm (28. Sep 2004)

Kannst du denn überhaupt irgendein Programm auf deiner Maschine fehlerfrei übersetzen?

Hier einmal der typische Anfänger-"Dreizeiler":


```
/* Hello.java */

public class Hello
{
  public static void main(String[] args)
  {
    System.out.println("Hello, world");
  }
}
```

Herauskopierten Teil in deinen Editor (joe2) kopieren und als "Hello.java" abspeichern.

Probiere einmal, den übersetzen zu lassen. Ansonsten kann es viele Gründe haben Vielleicht ist dein Java-System nicht richtig konfiguriert?

Zusätzlich empfehle ich dir zunächst die einschlägig empfohlenen Werke (siehe auch hier im Forum) zu studieren.


----------



## abollm (28. Sep 2004)

Frank S. hat gesagt.:
			
		

> Ich habe den Fehler gefunden  :lol:
> ...[entsorgt]...
> 
> Das einzige Problem was ich jetzt noch habe ist das ich noch  folgenden Fehler bekomme :
> ...



Dir fehlt natürlich noch diese Klasse. Hier ist der Code für die Datei "WindowsClosingAdapter.java", den du herauskopieren musst und in dein Arbeitsverzeichnis kopieren musst:


```
/* WindowClosingAdapter.java */

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

public class WindowClosingAdapter
extends WindowAdapter
{
  private boolean exitSystem;

  /**
   * Erzeugt einen WindowClosingAdapter zum Schliessen
   * des Fensters. Ist exitSystem true, wird das komplette
   * Programm beendet.
   */
  public WindowClosingAdapter(boolean exitSystem)
  {
    this.exitSystem = exitSystem;
  }

  /**
   * Erzeugt einen WindowClosingAdapter zum Schliessen
   * des Fensters. Das Programm wird nicht beendet.
   */
  public WindowClosingAdapter()
  {
    this(false);
  }

  public void windowClosing(WindowEvent event)
  {
    event.getWindow().setVisible(false);
    event.getWindow().dispose();
    if (exitSystem) {
      System.exit(0);
    }
  }
}
```


----------

