java - 如何在java中更改 "JMenuItem"及其'Action

标签 java swing actionlistener jmenuitem action-interface

在我的应用程序中,我使用 jmenuitem 执行一些操作以通过套接字编程连接特定端口。现在,我想当单击“连接”菜单项时,将其名称和操作更改为“断开连接”。 我的“连接”菜单项代码是这样的:

connect = new JMenuItem("Connect");
    connect.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            loginForm login = new loginForm();
            login.setVisible(true);

        }
    });
 jpopupMenu.insert(connect, 0); 

“断开连接”代码是这样的:

disconnect = new JMenuItem("Disonnect");
    disconnect.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                client.disconnect();
            } catch (IOException ex) {
                Logger.getLogger(systemTray.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });
jpopupMenu.insert(disconnect, 0);

但是此代码会导致重复项目添加到菜单中。 我找不到任何有关如何检测菜单项是否存在或替换菜单项的帮助!

最佳答案

您的问题标题说明了一切(即 Action ,但您正在使用 ActionListener/JMenuItem)。使用 Action(我们可以使用它来代替 JMenuItem),我们可以简单地覆盖 NAME 值,该值出现在菜单项名称中。这是一个例子。

注意menu.add(Action)而不是menu.add(JMenuItem)

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.*;

public class TestMenu {
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setSize(300, 300);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);

        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("Menu");

        Action menuAction = new AbstractAction("Connect") {
            private boolean connected = false;
            @Override
            public void actionPerformed(ActionEvent e) {
                if (!connected) {
                    JOptionPane.showMessageDialog(null, "Connected");
                    putValue(NAME, "Disonnect");
                    connected = true;
                } else {
                    JOptionPane.showMessageDialog(null, "Disconnected");
                    putValue(NAME, "Connect");
                    connected = false;
                }     
            }  
        };

        menuBar.add(menu);
        menu.add(menuAction);
        f.setJMenuBar(menuBar);
        f.setVisible(true);
    }
}

关于java - 如何在java中更改 "JMenuItem"及其'Action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26757243/

相关文章:

java - 如何在另一个类中使用来自一个类的 Action Listener 的目录路径变量?

java - 线程因未捕获的异常而退出

java - Android 移动设备未显示在 Eclipse 的设备选择器上

java - 如何获取JLabel[ ] [ ]中鼠标点击的标签索引?

java - JPanel 的子组件绘制/布局问题

java - 进度条对齐

Android 如何正确获取 Switch 的值?

Java GUI,需要使用 Action 监听器吗?

java - java中如何将null传递给SQL参数?

java - java中的无限列表