我正在用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置于顶部。
任何帮助??
提前致谢!
答案 0 :(得分:1)
我通过添加行
解决了这个问题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);
}
}
答案 1 :(得分:0)
您可以尝试使用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);
....