Native Swing Menu Bar Support For MacOS X In Java

A link that stands out is http://www.devdaily.com/blog/post/jfc-swing/handling-main-mac-menu-in-swing-application/ however the menu bar under Mac OS X displays as the package name as opposed to the application name. I'm using the code in the above link without any luck, so I'm unsure if anything's changed in recent Mac OS versions.

Here's an extract:

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());
            }

        }
    });
}

The first menu item on the menu bar should display as "test", unfortunately this isn't the case. The file menu works fine, on the other hand. Any ideas?

Answers


@Kezzer

I think I see what's going on. If you put the main() method in a different class, then everything works. So you need something like:

public class RootGUILauncher {
  public static void main(String[] args) {
    try {
                System.setProperty("apple.laf.useScreenMenuBar", "true");
                System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Test");
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        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());
        }
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new RootGUI();
        }
    });
}

And then put your RootGUI class in a different file.


Need Your Help

Native Swing Menu Bar Support For MacOS X In Java

java swing osx

A link that stands out is http://www.devdaily.com/blog/post/jfc-swing/handling-main-mac-menu-in-swing-application/ however the menu bar under Mac OS X displays as the package name as opposed to the

how to translate the SQL code “having” condition into LinqToSQL or LinqToEntites?

sql linq-to-sql linq-to-entities having

Could you tell me how to translate the following SQL code to Linq To SQL or Linq To Entites?

Simple C++ Substring Issue

c++ c string substring substr

The program does not properly find the substrings of each section of the name "John Fitzgerald Kennedy", and cannot output each name on a separate line. The program outputs a out of range exceptio...

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.