首页 > 解决方案 > 按下后如何保持 JMenuItem 可见?

问题描述

只是一个简单的 GUI 显示一个 JMenu >> JMenuItem 其中一个菜单项显示一个 JPopupMenu

我的问题是 JMenuItems' 在按下时是 setVisible(false),默认情况下我也用 MouseAdapter 尝试过。

public class SubMenu extends JFrame
{
    JMenuBar menubar = new JMenuBar();
    JMenu File = new JMenu("File");

    JMenuItem New = new JMenuItem("New");

    JMenuItem Open = new JMenuItem("Open");

    JMenuItem Save = new JMenuItem("Save");

    JMenuItem Import = new JMenuItem("Import");
    JPopupMenu Import_Popup = new JPopupMenu();
    JMenuItem Import_Pop_1 = new JMenuItem("Import newsfeed list...");
    JMenuItem Import_Pop_2 = new JMenuItem("Import bookmarks...");
    JMenuItem Import_Pop_3 = new JMenuItem("Import mail...");

    JMenuItem Exit = new JMenuItem("Exit");

    SubMenu()
    {
        setTitle("SubMenu");
        setSize(500, 500);
        setLocation(200, 200);
        setVisible(true);
        setLayout(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        menubar.setBounds(0, 0, 2000, 30);
        
        add(menubar);
        menubar.add(File);

        File.add(New);
        File.add(Open);
        File.add(Save);
        File.add(new JSeparator());
        File.add(Import);
        File.add(new JSeparator());
        File.add(Exit);

        add(Import_Popup);
        Import_Popup.add(Import_Pop_1);
        Import_Popup.add(Import_Pop_2);
        Import_Popup.add(Import_Pop_3);

// The issue is Right here.
        Import.addActionListener(new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent e) 
            {
                Import_Popup.show(Import, Import.getWidth(), 0);
            }
        });
        
    }// Constructor
    public static void main(String[] args) 
    {
        new SubMenu();
    }
}

在 Press 上引发此异常:

component must be showing on the screen to determine its location

有没有办法让 JMenuItems 在按下后保持可见?

标签: javaswingjmenujmenuitemjmenubar

解决方案


推荐阅读