栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

《Java 核心技术 卷1》 笔记 第九章 Swing 用户界面组件(9) 单选多选下拉菜单和弹出菜单

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《Java 核心技术 卷1》 笔记 第九章 Swing 用户界面组件(9) 单选多选下拉菜单和弹出菜单

9.5.3 复选框和单选按钮菜单项

在文本旁标注复选框或单选按钮得到菜单项

复选框菜单项:

JCheckBoxMenuItem readonlyItem = new JCheckBoxMenuItem("Read-only");
optionsMenu.add(readonlyItem);

单选菜单项:

需要加入 ButtonGroup:

JRadioButtonMenuItem insertItem = new JRadioButtonMenuItem("Insert");
insertItem.setSelected(true);
group.add(insertItem);
optionsMenu.add(overtypeItem);
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main {
    public static  void main(String[] args) {
        Main solution = new Main();

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                Menuframe frame = new Menuframe();
                frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

class Menuframe extends Jframe implements ActionListener {
    private JTextField text;

    public Menuframe(){
        setTitle("BorderTest");
        setSize(450,450);

        JMenuBar bar = new JMenuBar();
        JMenu fileMenu = new JMenu("file");
        JRadioButtonMenuItem copyItem = new JRadioButtonMenuItem("copy");
        JRadioButtonMenuItem pasteItem = new JRadioButtonMenuItem("paste");
        JRadioButtonMenuItem cutItem = new JRadioButtonMenuItem("cut");
        fileMenu.add(copyItem);
        fileMenu.add(pasteItem);
        fileMenu.add(cutItem);
        ButtonGroup group = new ButtonGroup();
        group.add(copyItem);
        group.add(pasteItem);
        group.add(cutItem);

        JMenu otherMenu = new JMenu("other");
        JCheckBoxMenuItem nothingItem = new JCheckBoxMenuItem("nothing");
        otherMenu.add(nothingItem);
        fileMenu.add(otherMenu);
        bar.add(fileMenu);

        copyItem.addActionListener(this);
        pasteItem.addActionListener(this);
        cutItem.addActionListener(this);
        nothingItem.addActionListener(this);

        setJMenuBar(bar);

        text = new JTextField();
        text.setEditable(false);
        add(text,BorderLayout.NORTH);
        copyItem.doClick();
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        text.setText(((JMenuItem)e.getSource()).getText());

    }
}

9.5.4 弹出菜单

弹出菜单是不固定在菜单栏的菜单,和菜单栏菜单相比,它没有标题。

创建添加子菜单:

JPopupMenu popup = new JPopupMenu();
JMenuItem item = new JMenuItem("Cut");
popup.add(item);

默认显示弹出菜单方式:右键

点击组件显示弹出菜单:

Component.setComponentPopupMenu(popup);

JDK5 根据鼠标点击/释放事件,自动弹出菜单在指定位置:

if(popup.isPopupTrigger(event))
    popup.show(event.getComponent(),event.getX(),event.getY());
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Main {
    public static  void main(String[] args) {
        Main solution = new Main();

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                Menuframe frame = new Menuframe();
                frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

class Menuframe extends Jframe implements ActionListener {
    private JTextField text;

    public Menuframe(){
        setTitle("BorderTest");
        setSize(450,450);

        JMenuBar bar = new JMenuBar();
        JMenu fileMenu = new JMenu("file");
        JRadioButtonMenuItem copyItem = new JRadioButtonMenuItem("copy");
        JRadioButtonMenuItem pasteItem = new JRadioButtonMenuItem("paste");
        JRadioButtonMenuItem cutItem = new JRadioButtonMenuItem("cut");
        fileMenu.add(copyItem);
        fileMenu.add(pasteItem);
        fileMenu.add(cutItem);
        ButtonGroup group = new ButtonGroup();
        group.add(copyItem);
        group.add(pasteItem);
        group.add(cutItem);

        JMenu otherMenu = new JMenu("other");
        JCheckBoxMenuItem nothingItem = new JCheckBoxMenuItem("nothing");
        otherMenu.add(nothingItem);
        fileMenu.add(otherMenu);
        bar.add(fileMenu);

        copyItem.addActionListener(this);
        pasteItem.addActionListener(this);
        cutItem.addActionListener(this);
        nothingItem.addActionListener(this);

        setJMenuBar(bar);

        text = new JTextField();
        text.setEditable(false);
        add(text,BorderLayout.NORTH);
        copyItem.doClick();


        JPopupMenu menu = new JPopupMenu();
        menu.add(copyItem);
        menu.add(pasteItem);
        menu.add(cutItem);
        menu.add(otherMenu);

        text.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent event) {
                menu.show(event.getComponent(),event.getX(),event.getY());
            }
        });
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        text.setText(((JMenuItem)e.getSource()).getText());

    }
}

 相关内容:选择 《Java核心技术 卷1》查找相关笔记

 喜欢的话,点个赞吧~!平时做题,以及笔记内容将更新到公众号。

关注公众号,互相学习:钰娘娘知识汇总

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749548.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号