在 Java Swing 應用中,JMenuBar 默認將菜單 (JMenu) 從左向右排列。需求是將特定菜單 (如「幫助」、「設置」) 固定顯示在菜單欄最右側。
Swing 的 Box 佈局管理器提供「彈性填充物」glue,可將後續組件推至容器右側。
JMenuBar menuBar = new JMenuBar();
// 左側菜單
menuBar.add(new JMenu("文件(F)"));
menuBar.add(new JMenu("編輯(E)"));
menuBar.add(new JMenu("視圖(V)"));
// 關鍵:添加水平膠水,佔用所有剩余空間,將後續菜單推到最右
menuBar.add(Box.createHorizontalGlue());
// 右側菜單
JMenu helpMenu = new JMenu("幫助(H)");
helpMenu.setMnemonic('H');
menuBar.add(helpMenu);
JMenu settingsMenu = new JMenu("設置(S)");
settingsMenu.setMnemonic('S');
menuBar.add(settingsMenu);
frame.setJMenuBar(menuBar);
JMenuBar 映射到系統菜單欄,**忽略** Box.createHorizontalGlue() 和手動設置的位置。無法在 macOS 上實現窗口級菜單欄右對齊。JToolBar 放置常用操作按鈕,支持 Floatable 且跨平台一致。JPopupMenu。import javax.swing.*;
import java.awt.*;
public class RightAlignMenuDemo {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("菜單欄右對齊演示");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 400);
JMenuBar menuBar = new JMenuBar();
menuBar.add(new JMenu("文件"));
menuBar.add(new JMenu("編輯"));
menuBar.add(Box.createHorizontalGlue()); // 核心代碼
menuBar.add(new JMenu("幫助"));
menuBar.add(new JMenu("關於"));
frame.setJMenuBar(menuBar);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
在 Windows/Linux 上,使用 Box.createHorizontalGlue() 即可輕松實現菜單欄右對齊。但受限於 macOS 系統級菜單欄規範,**無法在 macOS 上實現相同效果**。跨平台產品建議採用工具欄或側邊欄作為統一交互方案。