11右键菜单 & 对话框 & 对话框的阻塞

右键菜单

右键菜单,JPopupMenu,即弹出式菜单、上下文菜单

右键点击某个控件,根据上下文弹出一个菜单。

创建顺序:

  1. 创建 JPopupMenu
  2. 添加 JMenuItem
  3. 添加鼠标右键的响应,显示菜单窗口
  4. 菜单项被点击时,执行事件处理。

代码:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;

public class Demo {
	public static void main(String[] args) {
		MyFrame frame = new MyFrame("Title");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(700, 700);
		frame.setLocation(500, 300);
		frame.setVisible(true);
	}
}

class MyFrame extends JFrame{
	JPopupMenu popup = new JPopupMenu();
	
	public MyFrame(String title) {
		super(title);
		
		//ContentPane
		JPanel root = new JPanel();
		this.setContentPane(root);
		root.setLayout(new BorderLayout());
		
		//右键菜单
		popup.add(createMenuItem("打开", "fileOpen", "./src/images/buhaoyisi.png"));
		popup.add(createMenuItem("保存", "fileSave", "./src/images/ganga.png"));
		popup.add(createMenuItem("另存为", "fileSaveAs", "./src/images/gaoxing.png"));
		popup.add(createMenuItem("帮助", "fileHelp", "./src/images/hanxiao.png"));
		
		//添加右键点击事件响应,点击右键时,弹出菜单
		root.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {
				if(e.getButton() == MouseEvent.BUTTON3) {
					popup.show(e.getComponent(), e.getX(), e.getY());
				}
			}
			
		});
	}
	
	private JMenuItem createMenuItem(String text, String action, String iconName) {
		JMenuItem item = new JMenuItem(text);
		item.setActionCommand(action);
		item.addActionListener(actionListener);
		if(iconName != null) {
			item.setIcon(new ImageIcon(iconName));
		}
		return item;
	}
	
	private ActionListener actionListener = new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			String action = e.getActionCommand();
			System.out.println("执行命令" + action);
			
			if(action.equals("fileOpen")) {
				JOptionPane.showMessageDialog(MyFrame.this, action);
			}
		}
	};
}

显示(在该位置右键后):
在这里插入图片描述

对话框

对话框 Dialog

程序与用户之间对话的界面,获取用户输入的手段

消息提示框:使用 JOptionPane 提供的工具方法,可以方便地显示一些简单的对话框

showMessageDialog();  //简单消息提示
showConfirmDialog();  //简单消息确认
showInputDialog();   //简单数据输入
showOptionDialog();  //简单选择输入

代码:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Demo {
	public static void main(String[] args) {
		MyFrame frame = new MyFrame("Demo");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(700, 700);
		frame.setLocation(300, 300);
		frame.setVisible(true);
	}
}

class MyFrame extends JFrame{
	public MyFrame(String title) {
		super(title);
		
		JPanel root = new JPanel();
		this.setContentPane(root);
		root.setLayout(new FlowLayout());
		
		JTextField textField = new JTextField(20);
		JButton button = new JButton("测试");
		root.add(textField);
		root.add(button);
		
		button.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				test4();
			}
		});
	}
	
	//简单消息提示框
	public void test1() {
		JOptionPane.showMessageDialog(this, "操作已经完成");
		System.out.println("test1 exit");
	}
	
	//简单消息确认提示框
	public void test2() {
		int select = JOptionPane.showConfirmDialog(this, "是否确认删除?", "确认", JOptionPane.YES_NO_OPTION);
		
		//select 为用户点击的第几个按钮
		if(select == 0) {
			System.out.println("模拟执行数据删除操作...");
			System.out.println("删除完成");
		}
		System.out.println("test2 exit");
	}
	
	//简单数据输入框
	public void test3() {
		String input = JOptionPane.showInputDialog(
				this,
				"请输入你的身份证号\n(字母以X代替)",
				"0000");
		if(input != null) {
			System.out.println("输入的号码为: " + input);
		}
		System.out.println("test3 exit");
	}
	
	//简单选项对话框
	private void test4() {
		Object[] colors = {"红色", "蓝色", "绿色"};
		String select = (String)JOptionPane.showInputDialog(
				this,
				"你最喜欢的颜色",
				"请选择",
				JOptionPane.PLAIN_MESSAGE,
				null,
				colors,
				"红色");
		if(select != null) {
			System.out.println("选择了" + select);
		}
		System.out.println("test4 exit");
	}
}

显示:
在这里插入图片描述

对话框的阻塞

对话框最大的特点:阻塞 Blocked

  • 当对话框显示时,后台界面被阻塞
  • 调用方法阻塞,直到对话框被关闭

内部是通过无限循环实现的,直到用户的输入关闭了对话框。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值