JavaAwtSwing右键菜单 javax.swing.JPopupMenu javax.swing.JMenuItem javax.swing.JMenu

javax.swing.JPopupMenu 可以用于右键弹出菜单

类声明
public class JPopupMenu extends JComponent implements Accessible,MenuElement { 继承自 javax.swing.JComponent
实例化方法
JPopupMenu jPopupMenu = new JPopupMenu();
JPopupMenu jPopupMenu = new JPopupMenu("好像看不见");
添加JMenu和JMenuItem
JMenu是JMenuItem的子类, JMenu也可作为JMenuItem的容器
JPopupMenu和JMenu有自己的add方法, 和祖宗Component的add方法没有关系
JPopupMenu和JMenu有简化的add(String)方法,一步生成并添加MenuItem , 源码 public JMenuItem add(String s) { return add(new JMenuItem(s)); }
JPopupMenu和JMenu获取子部件的方法不一样
JPopupMenu获取子部件和数量用继承自java.awt.Container的 getComponent(int i) 和 getComponentCount() 方法
JMenu获取子部件用自己的 getMenuComponent(int i) 和 getMenuComponentCount() 方法

JComponent和它的子类拥有 public void setComponentPopupMenu(JPopupMenu popup) 方法用于添加JPopupMenu为右键菜单

例如: jLabel.setComponentPopupMenu(jPopupMenu);

示例代码1

package menu;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Swing右键弹出菜单JPopupMenu2206012039 {
	
	static void pln(Object o) {System.out.println(o);}
	
	static Frame frame = new Frame(new SecurityManager() {public String nm() {return this.getClassContext()[1].getSimpleName();} }.nm());
	
	static JLabel jLabel = new JLabel();
	
	static JPopupMenu jPopupMenu = new JPopupMenu("好像看不见");
	
	static JMenu jMenu = new JMenu("JMenu");
	
	static JMenuItem jMenuItem = new JMenuItem("JMenuItem");
	
	static {
		frame.addWindowListener(new WindowAdapter() {@Override public void windowClosing(WindowEvent e) {frame.dispose();System.exit(0);}});
		frame.setBounds(new Rectangle(new Point(100, 50), new Dimension(1600, 900)));
		frame.add(jLabel);
		
		jLabel.setComponentPopupMenu(jPopupMenu); //setComponentPopupMenu源自JComponent, Jlabe是它的子类
		jPopupMenu.add("JPopupMenu可以直接add(String)创建并添加MenuItem");
		jPopupMenu.add(jMenu);
		jMenu.add("JMenu也可以直接add(String)创建并添加MenuItem");
		jMenu.add(jMenuItem); for(int c=1;c<10;c++) {jMenu.add("JMenu下的JMenuItem-"+c); jPopupMenu.add("JPopupMenu下的JMenuItem-"+c);}
		pln(jPopupMenu.getComponentCount()); // 结果不为0
		pln(jMenu.getComponentCount()); // 结果为0
		pln(jMenu.getMenuComponentCount());
		for(int i=0; i<jPopupMenu.getComponentCount(); i++) {
			JMenuItem mi = (JMenuItem)jPopupMenu.getComponent(i);
			mi.addActionListener(ev->{JOptionPane.showConfirmDialog(frame, mi.getText());});
		}
		for(int i=0; i<jMenu.getMenuComponentCount();i++) {
			JMenuItem mi = (JMenuItem)jMenu.getMenuComponent(i);
			mi.addActionListener(ev->{JOptionPane.showMessageDialog(mi, mi.getText());}  );
		}
		
		
		jLabel.setText("""
				<html><head>
					<title>好像看不到title</title>
					<style>
						code{color:#0099ff; font-size:16px; background:black;}
					</style>
				</head><body style="font-size:16px;">
					<h1>javax.swing.JPopupMenu 可以用于右键弹出菜单</h1>
					<dl>
						<dt>类声明</dt>
						<dd><code>public class JPopupMenu extends JComponent implements Accessible,MenuElement { </code>继承自 javax.swing.JComponent</dd>
						<dt>实例化方法</dt>
						<dd><code>JPopupMenu jPopupMenu = new JPopupMenu();</code></dd>
						<dd><code>JPopupMenu jPopupMenu = new JPopupMenu("好像看不见");</code></dd>
						<dt>添加JMenu和JMenuItem
						<dd>JMenu是JMenuItem的子类, JMenu也可作为JMenuItem的容器
						<dd>JPopupMenu和JMenu有自己的add方法, 和祖宗Component的add方法没有关系
						<dd>JPopupMenu和JMenu有简化的add(String)方法,一步生成并添加MenuItem , 源码<code> public JMenuItem add(String s) { return add(new JMenuItem(s));  }</code>
						<dt>JPopupMenu和JMenu获取子部件的方法不一样
						<dd>JPopupMenu获取子部件和数量用继承自java.awt.Container的 getComponent(int i) 和 getComponentCount() 方法
						<dd>JMenu获取子部件用自己的 getMenuComponent(int i) 和 getMenuComponentCount() 方法
					</dl>
					<h1>JComponent和它的子类拥有 public void setComponentPopupMenu(JPopupMenu popup) 方法用于添加JPopupMenu为右键菜单</h1>
					例如:
					<code style="font-size:30px;">jLabel.setComponentPopupMenu(jPopupMenu);</code>
				</body></html>
				""");
		jLabel.setVerticalAlignment(JLabel.TOP);
	}
	public static void main(String...arguments) {
		frame.setVisible(true);
	}

}

效果👇

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kfepiza

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值