0

有谁知道如何控制出现在 JMenu 子菜单上的小箭头的显示?

我可以改变它吗?我可以禁用它吗?我可以移动它吗?

另外,我注意到只有当它们是其他 JMenu 的子菜单时,这个箭头才会出现在顶级 JMenu 上。这种不一致让我很恼火,因为我在 JMenuBar 的根目录上混合了 JMenuItem 和 JMenu,所以我希望它总是能指出这一点。无论如何也要这样做?

谢谢!

4

2 回答 2

5

看一下Menu.arrowIconUI 属性

没有箭头

(感谢 AndrewThompson 的测试代码)。

这样做会影响应用修改后创建的所有菜单。

所以在你初始化 Look and Feel 之后,在你创建任何菜单调用之前UIManager.getLookAndFeelDefaults().put("Menu.arrowIcon", null);

我只想说我认为这是一个糟糕的主意,并且会极力阻止你这样做。

于 2012-08-26T03:46:39.803 回答
4

只有当它们是其他 JMenu 的子菜单时,此箭头才会出现在顶级 JMenu 上。

在这里使用 Metal 的外观看起来(单调地)一致。

使用 Metal PLAF 的菜单和子菜单箭头

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);
    }
}
于 2012-08-26T02:50:20.063 回答