目录

Java程序设计-图形用户界面-十三菜单

Java程序设计 图形用户界面 【十三】菜单

Java程序设计 图形用户界面 【十三】菜单

菜单组件

JMenu与JMenuBar

菜单

https://i-blog.csdnimg.cn/blog_migrate/b3788a3c80c0f9cf681287b6d3a1f8fc.png

JMenuBar组件的功能是用来摆放JMenu组件,当建立完多个JMenu组件之后,需要通过JMenuBar组件来将JMenu组件加入到窗口中

JMenuBar

方法作用
public JMenuBar()创建新的JMenuBar对象
public JMenu add(JMenu e)将指定的JMenu加入到JMenuBar中
public JMenu getMenu(int index)返回指定位置的菜单
public int getMenuCount()返回菜单栏上的菜单数

JMenu

方法作用
public JMenu(String s)创建新的JMenu,并指定菜单名称
public JMenuItem add(JMenuItem menuItem)增加新的菜单项
public void addSeparator()加入分隔线

构建菜单演示:

import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Hello {
    public static void main(String[] args) {
        JFrame frame = new JFrame("一");
        JTextArea text = new JTextArea();
        text.setEditable(true);
        frame.getContentPane().add(new JScrollPane(text));
        JMenu file = new JMenu("文件(F)");
        JMenuBar menuBar = new JMenuBar();
        menuBar.add(file);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                System.exit(1);
            }
        });
        frame.setJMenuBar(menuBar);
        frame.setVisible(true);
        frame.setSize(300,200);
        frame.setLocation(500,500);

    }
}

https://i-blog.csdnimg.cn/blog_migrate/e77ba14e38f2df7a980546bdee8513c9.png

建立了一个JMenu,然后将JMenu的对象加入到JMenuBar中,再通过JFrame中的setJMenuBar()方法将此菜单栏加入到窗体上

JMenuItem

使用JMenuItem组件在菜单中加入菜单项

JMenuItem继承AbstractButton类,因此JMenuItem也可以理解为一种特殊的JButton组件,当选择某个菜单项时也会触发ActionEvent事件

JMenuItem类

方法作用
public JMenuItem(Icon icon)创建带有图标的JMenuItem
public JMenuItem(String text)创建带有指定文本的JMenuItem
public JMenuItem(String text,Icon icon)创建带有指定文本和图标的JMenuItem
public JMenuItem(String text,int mnemonic)创建带有指定文本的JMenuItem,并指定助记符
public void setMnemonic(int mnemonic)指定菜单项的助记符
public void setAccelerator(KeyStroke keyStroke)设置快捷键的组合键
import sun.security.krb5.internal.crypto.KeyUsage;

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Hello {
    public static void main(String[] args) {
        JFrame frame = new JFrame("一");
        JTextArea text = new JTextArea();
        text.setEditable(true);
        JMenu file = new JMenu("文件");
        JMenuBar menuBar = new JMenuBar();
        JMenuItem newItem = new JMenuItem("新建");
        JMenuItem openItem = new JMenuItem("打开");
        newItem.setMnemonic('N');
        openItem.setMnemonic('O');
        newItem.setAccelerator(KeyStroke.getKeyStroke('N', Event.CTRL_MASK));
        openItem.setAccelerator(KeyStroke.getKeyStroke('O', Event.CTRL_MASK));
        file.add(newItem);
        file.add(openItem);
        menuBar.add(file);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                System.exit(1);
            }
        });
        frame.setJMenuBar(menuBar);
        frame.setVisible(true);
        frame.setSize(300,200);
        frame.setLocation(300,300);
    }
}

https://i-blog.csdnimg.cn/blog_migrate/a400bdf1884f82e4fdfc32affb4677c0.png

事件处理

JMenuItem与JButton都是AbstractButton类的子类,事件处理机制是一样的

import sun.security.krb5.internal.crypto.KeyUsage;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Hello {
    public static void main(String[] args) {
        JFrame frame = new JFrame("一");
        final JTextArea text = new JTextArea();
        text.setEditable(true);
        JMenu file = new JMenu("文件");
        JMenuBar menuBar = new JMenuBar();
        JMenuItem newItem = new JMenuItem("新建");
        JMenuItem openItem = new JMenuItem("打开");
        newItem.setMnemonic('N');
        openItem.setMnemonic('O');
        newItem.setAccelerator(KeyStroke.getKeyStroke('N', Event.CTRL_MASK));
        openItem.setAccelerator(KeyStroke.getKeyStroke('O', Event.CTRL_MASK));
        file.add(newItem);
        file.add(openItem);
        menuBar.add(file);
        newItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                text.append("选择了新建\n");
            }
        });
        openItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                text.append("选择了打开\n");
            }
        });
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                System.exit(1);
            }
        });
        frame.add(text);
        frame.setJMenuBar(menuBar);
        frame.setVisible(true);
        frame.setSize(300,200);
        frame.setLocation(300,300);
    }.
}.

点击菜单项后 出现对应提示文字

https://i-blog.csdnimg.cn/blog_migrate/a6c542daf9cc8e766693710539d524c4.png