1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Frage zur MenuBar in Java

Dieses Thema im Forum "OS X-Developer" wurde erstellt von snoopysalive, 04.07.07.

  1. snoopysalive

    snoopysalive Allington Pepping

    Dabei seit:
    19.08.05
    Beiträge:
    195
    Hallo!

    Wenn man in Java eine grafische Oberfläche Programmiert, kann man deren Menüleiste doch über die VM-Option
    Code:
    -Dapple.laf.useScreenMenuBar=true
    in die System-Menüleiste auslagern.

    Ich möchte mein Programm aber richtig an OS X anpassen und habe daher dem Menü ein "Neues Fenster"-Item hinzugefügt und per
    Code:
    setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    festgelegt, dass das Hauptfenster lediglich verschwinden und das Programm nicht terminieren soll, wenn man auf den roten Schließen-Button klickt.

    Was soll ich sagen, das klappt ja auch soweit ganz gut. Nur verschwindet beim Klick auf den Schließen-Button auch die MenuBar aus der System-Menüleiste. Weil das bei keinem anderen OS X-Programm der Fall ist, stört mich das natürlich, weil sich dadurch auch die Tastenkombination für "Neues Fenster" nicht mehr benutzen lässt.

    Was muss ich also machen, damit die MenuBar nicht aus der System-Menüleiste verschwindet, wenn ich das Hauptfenster verstecke?

    Danke und Gruß,
    Matthias
     
  2. nic

    nic Bismarckapfel

    Dabei seit:
    18.01.06
    Beiträge:
    141
    Bin mir da nicht ganz sicher, da ich Java bisher nur unter Windows programmiert habe und es dieses Problem da nicht gab.

    Ich denke mal das die MenuBar ja von "Fenster abhängt" aber so wie du es willst muss es ja genau anderstrum sein ?
     
  3. snoopysalive

    snoopysalive Allington Pepping

    Dabei seit:
    19.08.05
    Beiträge:
    195
    Nun, es ist halt so, dass die MenuBars normalerweise wie unter Linux und Windows direkt im Hauptfenster hängen. Also direkt unter der Titelleiste.

    Meiner Erfahrung mit Java nach, kann eine Menüleiste aber auch nur in einen Frame gehängt werden. Menüleisten ohne entsprechenden Frame gibt es nicht. Daher kann ich es schon nachvollziehen, warum die MenuBar aus der System-Menüleiste verschwindet, sobald ich den Frame (in dem die Leiste ja hängt) verstecke.

    Allerdings kommt es mir halt Spanisch vor, wenn Apple zwar eine VM-Option entwickelt, die Java-Programme mehr OS X-like machen sollen, diese Option dann aber an der entscheidenden Stelle nicht so funktioniert wie OS X. Da muss es doch noch irgendwo eine Funktion oder Option geben, von der ich noch nichts weiß.
     
  4. nic

    nic Bismarckapfel

    Dabei seit:
    18.01.06
    Beiträge:
    141
  5. BerndderHeld

    BerndderHeld Spätblühender Taffetapfe

    Dabei seit:
    03.09.06
    Beiträge:
    2.801
    Mmh das hört sich interessant an. Ich schreibe gerade eine Java-Anwendung für die Uni. Da würde sowas als kleines Extra auch sehr gut hereinpassen.
     
  6. snoopysalive

    snoopysalive Allington Pepping

    Dabei seit:
    19.08.05
    Beiträge:
    195
    @nic:
    Danke für den Tipp. Allerdings kenne ich die Page schon. Es ist sogar so, dass der dort aufgeführte Aufruf
    Code:
    -Dcom.apple.macos.useScreenMenuBar=true
    als deprecated gilt und nicht mehr verwendet werden soll (sagt mir zumindest Eclipse). Stattdessen soll
    Code:
    -Dapple.laf.useScreenMenuBar=true
    verwendet werden.

    Die Page löst allerdings mein Problem nicht. Der MenuBar verabschiedet sich dennoch aus der System-Menüleiste. Wahrscheinlich darf man von Java eben nicht erwarten, zu 100% an OS X anpassbar zu sein.
     
  7. nic

    nic Bismarckapfel

    Dabei seit:
    18.01.06
    Beiträge:
    141
    Hab dir glaub vorhin den falschen Link gepostet. lies mal das hier:

    http://java.sun.com/developer/technicalArticles/JavaLP/JavaToMac2/

    da musst du glaub diese methode so aufrufen:

    protected void createMenus(JMenuBar mb) {
    mb.add(createJUnitMenu());
    }

    damit überschreibst du die methode von com.apple.eawt, musst du natürlich davor einbinden!!!

    dann kannst du danach deine Menus machen und danach nicht theFrame.setMenuBar() machen, sondern
    createMenus(theMenuBar)....

    so sollte das glaub ich gehen, hab mir halt nur den Text durchgelesen und net ausprobiert, da ich grad Prüfungen habe ;)
     
  8. snoopysalive

    snoopysalive Allington Pepping

    Dabei seit:
    19.08.05
    Beiträge:
    195
    Danke. Ich lese mir die Page mal durch und werde es ausprobieren.
     

Diese Seite empfehlen