我如何把JMenuBar在mac的顶部,并改变一个JButton的背景



我正在用java构建Mac桌面应用程序。我想改变JButton的背景,我也想让我的JMenuBar在顶部。

为了把我的JMenuBar放在顶部,我添加了以下代码:

  System.setProperty("apple.laf.useScreenMenuBar", "true");
  System.setProperty(
      "com.apple.mrj.application.apple.menu.about.name", "Stack");

它成功了!

改变背景色,我使用:

    JButton b = new JButton("press me!");
    b.setBackground(Color.blue);
    b.setContentAreaFilled(false);
    b.setOpaque(true);
    b.setBorderPainted(true);
    try {
        UIManager.setLookAndFeel(UIManager
                .getCrossPlatformLookAndFeelClassName());
    } catch (Exception e) {
    }

它也起作用了!

问题是,当我改变颜色时,JMenuBar不在顶部。经过一点调试,我知道改变LookAndFeel是负责任的。

完整代码:
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.UIManager;
public class Main {
    public static void main(String[] args) {    
        System.setProperty("apple.laf.useScreenMenuBar", "true");
        System.setProperty(
          "com.apple.mrj.application.apple.menu.about.name", "Stack");
        JButton b = new JButton("press me!");           
        b.setBackground(Color.blue);    
        b.setContentAreaFilled(false);
        b.setOpaque(true);
        b.setBorderPainted(true);
        try {
            UIManager.setLookAndFeel(UIManager
                    .getCrossPlatformLookAndFeelClassName());
        } catch (Exception e) {
        }   
        JFrame f = new JFrame();            
        f.add(b);           
        JMenuBar m = new JMenuBar();            
        m.add(new JMenu("item"));   
        f.setJMenuBar(m);
        f.setVisible(true);         
        f.setVisible(true);
    }
}

这段代码改变了按钮的颜色但是JMenuBar不在顶部。如果你注释了try中的行,它不会改变颜色,但它会把JMenuBar放在顶部。

帮忙吗? ?

提前感谢!

我通过添加

一行来解决这个问题
b.setUI(new MetalButtonUI());

和删除try catch。

它最终看起来像这样:

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.UIManager;
import javax.swing.plaf.metal.MetalButtonUI;
public class Main {
    public static void main(String[] args) {
        System.setProperty("apple.laf.useScreenMenuBar", "true");
        System.setProperty("com.apple.mrj.application.apple.menu.about.name",
                "Stack");
        JButton b = new JButton("press me!");
        b.setBackground(Color.blue);
        b.setContentAreaFilled(false);
        b.setOpaque(true);
        b.setBorderPainted(true);
        b.setUI(new MetalButtonUI());

        JFrame f = new JFrame();
        f.add(b);

        f.setBounds(0, 0, 500, 500);
        JMenuBar m = new JMenuBar();
        m.add(new JMenu("item"));

        f.setJMenuBar(m);
        f.setVisible(true);
        f.setVisible(true);
    }
}

您可以尝试JMenu和JMenuItem。这样你就可以在一个菜单中添加多个"菜单项":

....
menubar = new JMenuBar();
menu1 = new JMenu();
menuItem1 = new JMenuItem("item 1");
// add menu item to menu
menu1.add(menuItem1);
// add menu to menubar
menubar.add(menu1);
....

相关内容

  • 没有找到相关文章