Aspetto nativo dei menu Java su MacOS

Java è un linguaggio di programmazione molto potente e molto versatile. Uno dei suoi punti di forza è la portabilità, cioè la possibilità di scrivere il codice una volta e di farlo girare su sistemi operativi differenti senza dover scrivere una riga di codice in più.

Diciamo che il codice "gira" tranquillamente su sistemi diversi, ma a volte è necessario scriverlo in modo che le applicazione abbiano un aspetto più "nativo".

Uno dei problemi frequenti infatti è quello di dover aggiustare l'aspetto del classico menu dell'applicazione e renderlo identico al menu applicazione di MacOS. Per rendere possibile questa operazione è necessario aggiungere qualche riga di codice alla vostra applicazione e gestire le possibili eccezioni in modo da non bloccare in nessun modo la partenza del vostro programma!

Di seguito vi riporto un codice di esempio con le righe in questione:

package asdasd;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.UIManager;

/** @author alektos */
public class MacOsFrame {

 public MacOsFrame() {
  JFrame frame = new JFrame("Test menu");

  JMenuBar menuBar = new JMenuBar();
  JMenu menuTest = new JMenu("File");
  menuTest.add(new JMenuItem("Exit"));
  menuBar.add(menuTest);

  frame.setSize(400, 400);
  frame.setLocationRelativeTo(null);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setJMenuBar(menuBar);
  frame.setVisible(true);
 }

 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 (Exception e) {
   System.out.println("Exception: " + e.getMessage());
  }

  javax.swing.SwingUtilities.invokeLater(new Runnable() {
   public void run() {
    new MacOsFrame();
   }
  });
 }
}

Spero di essere stato d'aiuto. Buona programmazione a tutti!

Commenti