Java JmenuItem在单击不工作时执行某些操作

Java JmenuItem在单击不工作时执行某些操作,java,user-interface,jpanel,Java,User Interface,Jpanel,我目前正在尝试制作一个带有菜单的GUI,该菜单有两个选项可供选择。一个是“默认设置”,一个是“自定义设置”。当您单击其中一个时,它将带您到新的jPanel,该面板将显示相应的窗口、文本框等。然而,我似乎无法让鼠标点击的动作在面板之间切换。作为测试,我在每个面板上都有一个简单的jLabel,其中默认面板显示“Default”,自定义面板显示“custom”,每个菜单项在分别单击时应在它们之间切换。这是我目前的代码: frmLegitServerAdder = new JFrame(); frmLe

我目前正在尝试制作一个带有菜单的GUI,该菜单有两个选项可供选择。一个是“默认设置”,一个是“自定义设置”。当您单击其中一个时,它将带您到新的jPanel,该面板将显示相应的窗口、文本框等。然而,我似乎无法让鼠标点击的动作在面板之间切换。作为测试,我在每个面板上都有一个简单的jLabel,其中默认面板显示“Default”,自定义面板显示“custom”,每个菜单项在分别单击时应在它们之间切换。这是我目前的代码:

frmLegitServerAdder = new JFrame();
frmLegitServerAdder.setTitle("Legit Server Adder 5 Million");
frmLegitServerAdder.setBounds(100, 100, 546, 468);
frmLegitServerAdder.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JMenuBar menuBar = new JMenuBar();
frmLegitServerAdder.setJMenuBar(menuBar);

JMenu mnNewMenu = new JMenu("Settings");
menuBar.add(mnNewMenu);

JMenuItem menuItemDefaultSettings = new JMenuItem("Default Settings");
mnNewMenu.add(menuItemDefaultSettings);

JMenuItem menuItemCustomSettings = new JMenuItem("Custom Logon Settings");
mnNewMenu.add(menuItemCustomSettings);


frmLegitServerAdder.getContentPane().setLayout(new CardLayout(0, 0));

final JPanel defaultSettingsPanel = new JPanel();
frmLegitServerAdder.getContentPane().add(defaultSettingsPanel, "name_416522810155567");
defaultSettingsPanel.setLayout(null);

JLabel lblDefaultArea = new JLabel("Default Area");
lblDefaultArea.setBounds(217, 11, 90, 14);
defaultSettingsPanel.add(lblDefaultArea);

final JPanel customSettingsPanel = new JPanel();
frmLegitServerAdder.getContentPane().add(customSettingsPanel, "name_416549691176064");
customSettingsPanel.setLayout(null);

JLabel lblCustomArea = new JLabel("Custom Area");
lblCustomArea.setBounds(235, 21, 46, 14);
customSettingsPanel.add(lblCustomArea);

menuItemDefaultSettings.addMouseListener(new MouseAdapter()
{
    @Override
    public void mouseClicked(MouseEvent e)
    {
        defaultSettingsPanel.setVisible(true);
        customSettingsPanel.setVisible(false);

    }
});

menuItemCustomSettings.addMouseListener(new MouseAdapter()
{
    @Override
    public void mouseClicked(MouseEvent e)
    {
        defaultSettingsPanel.setVisible(false);
        customSettingsPanel.setVisible(true);
    }
});
代码运行,GUI显示良好,但当我点击任一菜单项时,实际上什么都没有发生,这是应该的。有什么想法吗

  • 你不应该使用鼠标听筒。相反,您应该向菜单项添加ActionListener。有关更多信息,请阅读上的Swing教程部分

  • 要交换组件时,应使用CardLayout。请参见同一教程中的


  • 您需要
    ActionListener

    menuItemDefaultSettings.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            defaultSettingsPanel.setVisible(true);
            customSettingsPanel.setVisible(false);
    
        }
    });
    

    希望这有帮助。

    谢谢!成功了。建议在代码中始终使用ActionListeners而不是特定的侦听器吗?这取决于您的用例。