2012-01-21 12 views
5

Cuando muevo mi JMenuBar a la barra de menú de la pantalla en Mac OS X, deja un espacio en blanco donde el menú estaría en mi ventana; Necesito eliminar ese espacio. Estoy usando¿Cómo muevo mi JMenuBar a la barra de menús de la pantalla en Mac OS X?

System.setProperty("apple.laf.useScreenMenuBar", "true") 

mover mi JMenuBar a la barra de menú de la pantalla. Mi amigo que usa una Mac informa que esto deja un feo espacio vertical donde residiría el menú si no establecí esa propiedad. ¿Cuál es la mejor manera de resolver este problema?

EDIT: Aquí está un ejemplo de mi fuente:

public static void main(String[] args) { 
    System.setProperty("apple.laf.useScreenMenuBar", "true"); 
    System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Name"); 

    JFrame frame = new JFrame("Gabby"); 
    final DesktopMain dm = new DesktopMain(); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(dm); 
    frame.setSize(160, 144); 
    frame.setLocationRelativeTo(null); 
    frame.setIgnoreRepaint(true); 

    JMenuBar menuBar = new JMenuBar(); 
    JMenu fileMenu = new JMenu("File"); 
    menuBar.add(fileMenu); 

    // Populating the menu bar code goes here 

    frame.setJMenuBar(menuBar); 
    frame.setVisible(true); 
} 
+1

Podría publicar código? Normalmente, el diseño se ajusta automáticamente para usar toda la sala. – Eelke

Respuesta

11

Dependiendo del momento en que se hace, estableciendo la propiedad después de sus lanzamientos de programas pueden ser demasiado tarde para ser eficaz. En su lugar, agregue la configuración en el momento del lanzamiento.

java -Dapple.laf.useScreenMenuBar=true -jar MyApplication.jar 

Alternativamente, establezca la propiedad en su paquete de aplicaciones Info.plist, como se discutió en Java Deployment Options for Mac OS X, Java Dictionary Info.plist Keys, About Info.plist Keys y Java Runtime System Properties.

<key>Properties</key> 
<dict> 
    <key>apple.laf.useScreenMenuBar</key> 
    <string>true</string> 
    ... 
</dict> 

Adición: Como se muestra a continuación, el problema no hace aparecen usando el enfoque sugerido por @Urs Reupke o yo mismo. Su (faltante) DesktopMain puede ser la culpa.

Screen capture

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JPanel; 

/** @see http://stackoverflow.com/questions/8955638 */ 
public class NewMain { 

    public static void main(String[] args) { 
     System.setProperty("apple.laf.useScreenMenuBar", "true"); 
     System.setProperty(
      "com.apple.mrj.application.apple.menu.about.name", "Name"); 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 

       JFrame frame = new JFrame("Gabby"); 
       final JPanel dm = new JPanel() { 

        @Override 
        public Dimension getPreferredSize() { 
         return new Dimension(320, 240); 
        } 
       }; 
       dm.setBorder(BorderFactory.createLineBorder(Color.blue, 10)); 

       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(dm); 
       frame.pack(); 
       frame.setLocationByPlatform(true); 

       JMenuBar menuBar = new JMenuBar(); 
       JMenu fileMenu = new JMenu("File"); 
       menuBar.add(fileMenu); 
       frame.setJMenuBar(menuBar); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
+0

trashgod, eso no parece correcto - Lo estoy haciendo en mi código, y todavía tengo que escuchar una queja. –

+0

@UrsReupke: Buen punto; editado No puedo reproducir el efecto, pero he visto informes como [esto] (http://stackoverflow.com/a/1654547/230513). – trashgod

+0

+1 en la milla extra. –

3

Como alternativa a lo que sugiere trashgod, hacer lo que estás haciendo - pero hacerlo muy temprano, antes de inicializar la interfaz de usuario.

Además, es posible considerar el uso de esta opción para mostrar el nombre de su aplicación en la barra:

System.setProperty("com.apple.mrj.application.apple.menu.about.name", "MyApplication"); 
+0

+1 tnecniv: Proporcione un [sscce] (http://sscce.org/) que muestre el problema que describe. – trashgod

+0

@trashgod Agregué mi ejemplo de fuente – tnecniv

+0

@tnecniv: He elaborado [aquí] (http://stackoverflow.com/a/8956715/230513). – trashgod

0

Para Java 8 utilización de este

System.setProperty("apple.awt.application.name", "My app"); 
Cuestiones relacionadas