菜单就是位于窗口顶部的一排类似按钮的东西,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) | 设置菜单的选择状态 |