Mac OS X での JMenuBar の移動に関する問題
Mac OS X 環境で JMenuBar を画面メニュー バーに移動しようとすると、多くの場合、ウィンドウ内のメニューが存在する場所には空白スペースが残されます。この問題は、適切なタイミングでプロパティ「apple.laf.useScreenMenuBar」を確立することで解決できます。
解決策
この問題に対処するには、プロパティ「apple」を設定します。次のいずれかの方法を使用してプログラム起動時に .laf.useScreenMenuBar" を使用します:
java -Dapple.laf.useScreenMenuBar=true -jar MyApplication.jar
<key>Properties</key> <dict> <key>apple.laf.useScreenMenuBar</key> <string>true</string> ... </dict>
その他の考慮事項
アプリケーションの起動後にプロパティを設定しても効果がない可能性があることに注意することが重要です。次のコードは、空白スペースが存在しない正しい実装を示しています:
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); } }); } }
以上がJMenuBar が Mac OS X 画面のメニュー バーに空白スペースを残すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。