我正在用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);
....