jmenu子菜单小箭头图标指示器

dly7yett  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(473)

有人知道如何控制jmenu子菜单上出现的小箭头的显示吗?
我能换一下吗?我可以禁用它吗?我能移动它吗?
另外,我注意到,只有当顶级jmenus是其他jmenu的子菜单时,这个箭头才出现在它们上面。这种不一致性让我很恼火,因为jmenuitem和jmenu混合在jmenubar的根上,所以我希望它总是能指示它。无论如何也要这么做?
谢谢!

kxxlusnw

kxxlusnw1#

仅当顶级jmenus是其他jmenu的子菜单时,此箭头才会出现在顶级jmenus上。
它的外观似乎(单调地)一致,在这里使用金属。

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);
    }
}
t3psigkw

t3psigkw2#

看一看这个 Menu.arrowIcon ui属性

(感谢andrewthompson提供的测试代码)。
执行此操作将影响应用修改后创建的所有菜单。
因此,在您初始化外观和感觉之后,在您创建任何菜单之前 UIManager.getLookAndFeelDefaults().put("Menu.arrowIcon", null); 我只想说,我认为这是一个可怕的想法,并会强烈劝阻你这样做。

相关问题