有谁知道如何控制出现在 JMenu 子菜单上的小箭头的显示?
我可以改变它吗?我可以禁用它吗?我可以移动它吗?
另外,我注意到只有当它们是其他 JMenu 的子菜单时,这个箭头才会出现在顶级 JMenu 上。这种不一致让我很恼火,因为我在 JMenuBar 的根目录上混合了 JMenuItem 和 JMenu,所以我希望它总是能指出这一点。无论如何也要这样做?
谢谢!
看一下Menu.arrowIcon
UI 属性
(感谢 AndrewThompson 的测试代码)。
这样做会影响应用修改后创建的所有菜单。
所以在你初始化 Look and Feel 之后,在你创建任何菜单调用之前UIManager.getLookAndFeelDefaults().put("Menu.arrowIcon", null);
我只想说我认为这是一个糟糕的主意,并且会极力阻止你这样做。
只有当它们是其他 JMenu 的子菜单时,此箭头才会出现在顶级 JMenu 上。
在这里使用 Metal 的外观看起来(单调地)一致。
import javax.swing.*;
public class MenuArrows {
MenuArrows() {
JMenuBar mb = new JMenuBar();
JMenu root1 = new JMenu("Root Menu 1");
JMenu root2 = new JMenu("Root Menu 2");
addSubMenus(root1, 5);
addSubMenus(root2, 3);
mb.add(root1);
mb.add(root2);
JOptionPane.showMessageDialog(null, mb);
}
public void addSubMenus(JMenu parent, int number) {
for (int i=1; i<=number; i++) {
JMenu menu = new JMenu("Sub Menu " + i);
parent.add(menu);
addSubMenus(menu, number-1);
addMenuItems(menu, number);
}
}
public void addMenuItems(JMenu parent, int number) {
for(int i=1; i<=number; i++) {
parent.add(new JMenuItem("Item " + i));
}
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
new MenuArrows();
}
};
SwingUtilities.invokeLater(r);
}
}