java-swing-高级控件初步-菜单

菜单就是位于窗口顶部的一排类似按钮的东西,eg:
在这里插入图片描述
上面窗口中就有一个菜单栏,三个菜单,分别是“菜单”,“编辑”和“文件”。

当点击菜单时,会弹出这个菜单中的所有菜单项,eg:
在这里插入图片描述
上面当点击“菜单”后,弹出了它的四个菜单项,还有一个分割符。

菜单由JMenu类实现,菜单项(菜单子项)由 JMenuItem类实现,创建了菜单,还要将其添加到菜单栏上,菜单栏由JMenuBar 类实现。

现在给窗口创建一个完整的菜单,需要用到下面的几个类:

import javax.swing.JMenu;  //菜单
import javax.swing.JMenuBar;  //菜单栏
import javax.swing.JMenuItem;  //菜单项
import javax.swing.JCheckBoxMenuItem; //增加一个,创建在上图中带勾选框的菜单项

创建一个菜单栏,3个菜单,并创建一些菜单项,包括带勾选框的菜单项

JMenuBar jmenubar1 = new JMenuBar();  //菜单栏

JMenu jmenu1 = new JMenu("文件");  //创建3个菜单
JMenu jmenu2 = new JMenu("编辑");  
JMenu jmenu3 = new JMenu("工具");  

JMenuItem jmenuitem1 = new JMenuItem("打开"); //普通的菜单项
JMenuItem jmenuitem2 = new JMenuItem("关闭");
JMenuItem jmenuitem3 = new JMenuItem("新建");
JMenuItem jmenuitem4 = new JMenuItem("复制");
JMenuItem jmenuitem5 = new JMenuItem("黏贴");
JMenuItem jmenuitem6 = new JMenuItem("撤销");
JMenuItem jmenuitem7 = new JMenuItem("抓手");
JMenuItem jmenuitem8 = new JMenuItem("钢笔");
JMenuItem jmenuitem9 = new JMenuItem("选区");

JCheckBoxMenuItem jc1 = new JCheckBoxMenuItem("持续显示");//带勾选框的菜单项
JCheckBoxMenuItem jc2 = new JCheckBoxMenuItem("优先级别");

当然,由于没有给菜单项们添加任何的事件监听者,上面的一些“打开”“关闭”等并没有实际上的意义,不过这只是暂时的。

下面将1-3的菜单项添加到“文件”菜单,4-6的菜单项添加到“编辑”菜单,7-9的菜单项添加到“工具”菜单,最后将两个带勾选框的菜单项添加到“文件”菜单,并与前三个菜单项之间,添加一个分隔符(添加分隔符是一个方法)。最后将3个菜单添加到菜单栏

jmenu1.add(jmenuitem1); //“文件”菜单添加菜单项
jmenu1.add(jmenuitem2);
jmenu1.add(jmenuitem3);

jmenu1.addSeparator();  //添加分割符
jmenu1.add(jc1);        //“文件”菜单添加两个带勾选框的菜单项
jmenu1.add(jc2);

jmenu2.add(jmenuitem4); //“编辑”菜单添加菜单项
jmenu2.add(jmenuitem5); 
jmenu2.add(jmenuitem6);

jmenu3.add(jmenuitem7); //“工具”菜单添加菜单项
jmenu3.add(jmenuitem8);
jmenu3.add(jmenuitem9);

jmenubar1.add(jmenu1); //三个菜单添加到菜单栏
jmenubar1.add(jmenu2);
jmenubar1.add(jmenu3);

因为菜单栏是在窗口上的,所有要设置窗口的菜单栏:

JFrame jframe = new JFrame("菜单创建");//创建一个窗口 
jframe.setJMenuBar(jmenubar1);    //设置窗口的菜单栏,就是将前面设置好的菜单栏添加进去

好的看一下完整的代码:

import javax.swing.JFrame;   //顶层容器 (框架)
import javax.swing.JMenu;  //菜单
import javax.swing.JMenuBar;  //菜单栏
import javax.swing.JMenuItem;  //菜单项
import javax.swing.JCheckBoxMenuItem; //增加一个,创建在上图中带勾选框的菜单项

public class text_JMenu
{
	public static void main(String[] args) 
	{	
		JMenuBar jmenubar1 = new JMenuBar();  //菜单栏

		JMenu jmenu1 = new JMenu("文件");  //创建3个菜单
		JMenu jmenu2 = new JMenu("编辑");  
		JMenu jmenu3 = new JMenu("工具");  

		JMenuItem jmenuitem1 = new JMenuItem("打开"); //普通的菜单项
		JMenuItem jmenuitem2 = new JMenuItem("关闭");
		JMenuItem jmenuitem3 = new JMenuItem("新建");
		JMenuItem jmenuitem4 = new JMenuItem("复制");
		JMenuItem jmenuitem5 = new JMenuItem("黏贴");
		JMenuItem jmenuitem6 = new JMenuItem("撤销");
		JMenuItem jmenuitem7 = new JMenuItem("抓手");
		JMenuItem jmenuitem8 = new JMenuItem("钢笔");
		JMenuItem jmenuitem9 = new JMenuItem("选区");

		JCheckBoxMenuItem jc1 = new JCheckBoxMenuItem("持续显示");//带勾选框的菜单项
		JCheckBoxMenuItem jc2 = new JCheckBoxMenuItem("优先级别");
		
		jmenu1.add(jmenuitem1); //“文件”菜单添加菜单项
		jmenu1.add(jmenuitem2);
		jmenu1.add(jmenuitem3);

		jmenu1.addSeparator();  //添加分割符
		jmenu1.add(jc1);        //“文件”菜单添加两个带勾选框的菜单项
		jmenu1.add(jc2);

		jmenu2.add(jmenuitem4); //“编辑”菜单添加菜单项
		jmenu2.add(jmenuitem5); 
		jmenu2.add(jmenuitem6);

		jmenu3.add(jmenuitem7); //“工具”菜单添加菜单项
		jmenu3.add(jmenuitem8);
		jmenu3.add(jmenuitem9);

		jmenubar1.add(jmenu1); //三个菜单添加到菜单栏
		jmenubar1.add(jmenu2);
		jmenubar1.add(jmenu3);
		
		JFrame jframe = new JFrame("菜单创建");//窗口
		jframe.setBounds(250, 300, 300, 250);  //设置窗口大小
		
		jframe.setJMenuBar(jmenubar1);    //设置窗口的菜单栏,就是将前面设置好的菜单栏添加进去
		
		jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭时操作
		jframe.setVisible(true);   //设置可见
	}
}

运行结果:
在这里插入图片描述

追加一些关于JMenu的一些方法:

方法名称说明
add(Action a)创建连接到指定 Action 对象的新菜单项,并将其追加到此菜单的末尾
add(Component c)将某个组件追加到此菜单的末尾
add(Component c,int index)将指定组件添加到此容器的给定位置
add(JMenuItem menultem)将某个菜单项追加到此菜单的末尾
add(String s)创建具有指定文本的新菜单项,并将其追加到此菜单的末尾
addSeparator()将新分隔符追加到菜单的末尾
doCliclc(int pressTime)以编程方式执行“单击”操作
getDelay()返回子菜单向上或向下弹出前建议的延迟(以毫秒为单位)
getltem(int pos)返回指定位置的 JMenuItem
getItemCount()返回菜单上的项数,包括分隔符
getMenuComponent(int n)返回位于位置 n 的组件
getMenuComponents()返回菜单子组件的 Component 数组
getSubElements()返回由 MenuElement 组成的数组,其中包含此菜单组件的子菜单
insert(JMenuItem mi,int pos)在给定位置插入指定的 JMenuitem
insert(String s,pos)在给定位置插入具有指定文本的新菜单项
insertSeparator(int index)在指定的位置插入分隔符
isMenuComponent(Component c)如果在子菜单层次结构中存在指定的组件,则返回 true
isPopupMenuVisible()如果菜单的弹出窗口可见,则返回 rue
isSelected()如果菜单是当前选择的(即高亮显示的)菜单,则返回 true
isTopLevelMenu()如果菜单是“顶层菜单”(即菜单栏的直接子级),则返回 true
setDelay(int d)设置菜单的 PopupMenu 向上或向下弹出前建议的延迟
setMenuLocation(int x,int y)设置弹出组件的位置
setPopupMenuVisible(boolean b)设置菜单弹出的可见性
setSelected(boolean b)设置菜单的选择状态
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值