Support de barre de menu Swing natif pour MacOS X en Java
Un lien qui se démarque est http://www.devdaily.com/blog/post/jfc-swing/handling-main-mac-menu-in-swing-application/ cependant la barre de menu sous Mac OS X s'affiche comme nom de package plutôt le nom de l'application. Je suis en utilisant le code dans le lien ci-dessus sans un peu de chance, donc je ne suis pas sur si rien n'est changé dans les dernières versions de Mac OS.
Voici un extrait:
public RootGUI() { super("Hello"); JMenuBar menuBar = new JMenuBar(); JMenu file = new JMenu("File"); JMenuItem item = new JMenuItem("Woah"); file.add(item); menuBar.add(file); setJMenuBar(menuBar); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(100, 100); pack(); setVisible(true); }
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
System.setProperty("apple.laf.useScreenMenuBar", "true");
System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Test");
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new RootGUI();
}
catch(ClassNotFoundException e) {
System.out.println("ClassNotFoundException: " + e.getMessage());
}
catch(InstantiationException e) {
System.out.println("InstantiationException: " + e.getMessage());
}
catch(IllegalAccessException e) {
System.out.println("IllegalAccessException: " + e.getMessage());
}
catch(UnsupportedLookAndFeelException e) {
System.out.println("UnsupportedLookAndFeelException: " + e.getMessage());
}
}
});
}
Le premier élément de menu dans la barre de menu doit s'afficher en tant que "test", malheureusement ce n'est pas le cas. Le menu fichier fonctionne très bien, sur l'autre main. Des idées?
source d'informationauteur Kezzer | 2008-11-20
Vous devez vous connecter pour publier un commentaire.
@Kezzer
Je crois que je vois ce qu'il se passe. Si vous mettez la méthode main() dans un classe différentealors tout fonctionne. Si vous besoin de quelque chose comme:
Et puis mettez votre RootGUI classe dans un fichier différent.
Vous devez définir la "com".apple.mrj.application.apple.menu.à propos de.le nom de" système de la propriété dans le thread principal, pas dans le Swing de thread (en d'autres termes, il suffit de faire la première ligne dans le programme).
Que je comprends que vous souhaitez renommer votre menu d'application indiqué sur l'os x barre de menu. Eh bien, je n'ai pas trouver un système de propriété mais j'ai trouvé une option de ligne de commande:
qui a fonctionné pour moi.
BTW: Le syystem de la propriété com.apple.mrj.application.apple.menu.à propos de.nom pour renommer le sujet de menu dans votre menu d'application, pas la barre de menu lui-même
Voir ce lien ici (le ancien lien a probablement été tué peu de temps après le sun-oracle-acquisition).
Vous pouvez également utiliser Macify lorsque vous générez l'application de sorte que vous n'avez pas besoin de modifier le code.
Si vous souhaitez vous faire livrer une application qui ressemble natif sur Mac OS X, une partie importante est de fournir une application bundle. Dans le bundle de l'application, vous serez en mesure de fournir une liste de propriétés du fichier afin de résoudre ce problème.
Officiel info: Java Guide de Développement pour Mac OS X
Si le lancement de plusieurs JFrames et que vous utilisez le menu mac, puis l'un des JFrames pourrait être le remplacement de la JFrame que vous voulez avec un qui a une autre structure de menu. Je ne suis pas sûr si vous pouvez partager un JMenuBar pour plusieurs JFrames, mais vous pourriez juste faire une application large de la barre de menu que tous les cadres de l'instancier.
@Matt: Malheureusement, ça ne fonctionne pas pour moi.
C'est ce que j'avais essayé en plus de votre commentaire.
pour toute personne intéressée, même si cette question est de 6 ans j'ai eu le même problème. Swing menus ne sont pas affichés dans le mac natif de bar.
J'ai trouvé un moyen plus facile et plus simple solution...
Il suffit d'ajouter à votre JFrame Java.awt Menu Composant au lieu d'un JMenu et il s'affiche automatiquement dans le natif de la barre de menu!