java - 执行的菜单监听器操作

标签 java swing jmenuitem jmenubar

import javax.swing.*;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
import java.awt.*;

class displaymsg extends JFrame {
    public static void main(String args []){
        JFrame f = new JFrame();
        JMenuBar mb = new JMenuBar();
        JMenu supply = new JMenu("supply");
        JMenuItem addnew = new JMenuItem("add");

        addnew.addMenuListener(new MenuListener(){
            @Override
            public void menuSelected(MenuEvent me){
                JOptionPane.showMessageDialog(f,"under construction");
            }
        });
        f.add(mb); mb.add(supply);
        supply.add("New Product");
        f.setSize(400, 400);
        f.setJMenuBar(mb);
        f.setLayout(null);
        f.setLocationRelativeTo(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
} 

这是我的 menuListener 代码,但我不知道如何做到这一点
如果有人对我可能做错的事情有任何想法,请指出

最佳答案

请参阅以下评论mcve :

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; 
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

//see https://www.javatpoint.com/java-naming-conventions
//the class does not need to extend JFrame if not used as JFrame
public class DisplayMsg{

    public static void main(String args []){
        JFrame f = new JFrame();

        JMenu supply = new JMenu("Supply");
        supply.add("New Product");
        JMenuItem addNew = new JMenuItem("Add"); //naming conventions

        addNew.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(f,"under construction");
            }
        });

        JMenuBar mb = new JMenuBar();
        mb.add(supply);
        mb.add(addNew); //missing in your code
        //f.add(mb); this would add the menu to the content pane 
        f.setJMenuBar(mb); 

        f.setSize(400, 400);
        //f.setLayout(null);  // do not use null layout
                              //see https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
        f.setLocationRelativeTo(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

MenuListener 可以添加到 JMenu,但不能添加到 JMenuItem。如果你想使用它 将 addNew 更改为 JMenu :

    JMenu addNew = new JMenu("Add"); 
    addNew.addMenuListener(new MenuListener(){
        @Override
        public void menuSelected(MenuEvent me){
            JOptionPane.showMessageDialog(f,"under construction");
        }

        @Override
        public void menuCanceled(MenuEvent e) {}

        @Override
        public void menuDeselected(MenuEvent e) {}
    });

关于java - 执行的菜单监听器操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50885014/

相关文章:

java - 尽管我将 jar 文件添加到类路径 (Eclipse),但为什么与 SQLite 的连接失败?

java - 处理 JPopupMenu 关闭

Java - 将快捷键添加到 JMenuItem

java - 是否可以在replaceAll上使用字符串变量?

java - 如何切换数字范围的语句?

java - Jetty_run错误java.lang.TypeNotPresentException : Type javax.annotation.meta.When不存在

Java - 将 JButton 数组添加到 JFrame

java - 循环在网格上绘制一 block

java - ScrollBar 在 Swing 的 JScrollpane 中移动不流畅

java - Swing - 最后一个 JMenuItem 占据 JMenuBar 上的其余空间