JMenu 的使用

JMenu 的使用

1,在一个窗口中,我们经常需要给窗口添加菜单条。在 Java 中这一部分是由三个类实现的,它们是JMenuBar、JMenu和JMenuItem,分别对应菜单条、菜单和菜单项。

一、菜单条(JMenuBar)

  JMenuBar 的构造方法是 JMenuBar(),相当简单。在构造之后,还要将它设置成窗口的菜单条,这里要用 setJMenuBar 方法:

  JMenuBar TestJMenuBar=new JMenuBar();

  TestFrame.setJMenuBar(TestJMenuBar);

  需要说明的是,JMenuBar 类根据 JMenu 添加的顺序从左到右显示,并建立整数索引。

二、菜单(JMenu)

  在添加完菜单条后,并不会显示任何菜单,所以还需要在菜单条中添加菜单。菜单 JMenu 类的构造方法有4种:

  • JMenu() 构造一个空菜单。
  • JMenu(Action a) 构造一个菜单,菜单属性由相应的动作来提供。
  • JMenu(String s) 用给定的标志构造一个菜单。
  • JMenu(String s,Boolean b) 用给定的标志构造一个菜单。如果布尔值为false,那么当释放鼠标按钮后,菜单项会消失;如果布尔值为true,那么当释放鼠标按钮后,菜单项仍将显示。这时的菜单称为 tearOff 菜单。

  在构造完后,使用 JMenuBar 类的 add 方法添加到菜单条中。

三、菜单项(JmenuItem)

  接下来的工作是往菜单中添加内容。 在菜单中可以添加不同的内容,可以是菜单项(JMenuItem),可以是一个子菜单,也可以是分隔符。

  子菜单的添加是直接将一个子菜单添加到母菜单中,而分隔符的添加只需要将分隔符作为菜单项添加到菜单中。


JMenuBar的常用方法及说明

方 法

说 明

add(JMenu c)

将指定的菜单添加到菜单栏的末尾

getMenu(int index)

获取菜单栏中指定位置的菜单

getMenuCount()

获取菜单栏上的菜单数

setHelpMenu(JMenu menu)

设置用户选择菜单栏中的“帮助”选项时显示的帮助菜单

getHelpMenu()

获取菜单栏的帮助菜单

setSelected(Component sel)

设置当前选择的组件,更改选择模型

isSelected()

如果当前已选择了菜单栏的组件,则返回true

JMenu类方法及其说明

方 法

说 明

setModel(ButtonModel newModel)

设置菜单的数据模型

isSelected()

如果菜单当前是被选中的,则返回true

setSelected(boolean b)

设置菜单的选择状态

isPopupMenuVisible()

如果菜单的弹出菜单可见,则返回true

setPopupMenuVisible(boolean b)

设置弹出菜单的可见性。如果未启用菜单,则此方法无效

getPopupMenuOrigin()

计 算JMenu的弹出菜单的原点。此方法使用名为Menu.menu PopupOffsetX,Menu.menuPopupOffsetY、Menu.submenuPopup OffsetX和Menu.submenuPopupOffsetY的外观属性调整弹出的确切位置

setMenuLocation(int x,int y)

设置弹出菜单的位置

add(JMenuItem menuItem)

将某个菜单项追加到此菜单的末尾,并返回添加的菜单项

add(Component c)

将组件追加到此菜单的末尾,并返回添加的控件

add(Component c,int index)

将指定控件添加到此容器的给定位置上,如果index等于-1,则将控件追加到末尾

add(String s)

创建具有指定文本的菜单项,并将其追加到此菜单的末尾

addSeparator()

将新分隔符追加到菜单的末尾

insert(String s,int pos)

在给定的位置插入一个具有指定文本的新菜单项

insert(JMenuItem mi,int pos)

在给定的位置插入指定的JMenuitem

insertSeparator(int index)

在指定的位置插入分隔符

getItem(int pos)

获得指定位置的JMenuItem,如果位于pos的组件不是菜单项,则返回null

getItemCount()

获得菜单上的项数,包括分隔符

remove(JMenuItem item)

从此菜单移除指定的菜单项,如果不存在弹出菜单,则此方法无效

remove(int pos)

从此菜单移除指定索引处的菜单项

isTopLevelMenu()

如果菜单是“顶层菜单”,则返回true

getPopupMenu()

获得与此菜单关联的弹出菜单,如果不存在将创建一个弹出菜单

addMenuListener(MenuListener l)

添加菜单事件的侦听器

getMenuListeners()

获得利用addMenuListener()添加到此JMenu的所有MenuListener组成的数组

四、使用示例:

import java.awt.*;

import javax.swing.*;

public class MenuDemo extends JFrame{

    public MenuDemo(){

       this.setBounds(0,0,250,150);

       JMenuBar TestJMenuBar=new JMenuBar(); /* 创建一个菜单条对象 */

       this.setJMenuBar(TestJMenuBar); /* 将菜单条设置为本窗体的菜单条 */

       JMenu TestMenu=new JMenu("文件"); /* 创建"文件"菜单对象 */

       TestJMenuBar.add(TestMenu); /* 将"文件"菜单添加到菜单条中 */

       JMenu edit=new JMenu("编辑");

       TestJMenuBar.add(edit);

       JMenu view=new JMenu("视图");

       TestJMenuBar.add(view);

       JMenu opt=new JMenu("选项");

       TestJMenuBar.add(opt);

       JMenu help=new JMenu("帮助");

       TestJMenuBar.add(help);

       opt.add(new JMenuItem("改变标题"));

       opt.addSeparator();

       JMenu change=new JMenu("改变前景色");/* 创建"改变前景色"菜单 */

       opt.add(change); /* 将"改变前景色"菜单作为子菜单添加到"选项菜单中 */

       /* 在"改变前景色"子菜单中添加以下下级菜单项 */

       change.add(new JMenuItem("红色"));

       change.add(new JMenuItem("黄色"));

       change.add(new JMenuItem("紫色"));

       change.add(new JMenuItem("蓝色"));

       /* 在"改变前景色"子菜单下添加一分隔符 */

       opt.addSeparator();

       /* 添加菜单项"改变后景色"添加到菜单"选项" */

       opt.add(new JMenuItem("改变后景色"));

       this.setTitle("MenuDemo");

       this.setSize(300,200);

       this.setLocation(400,400);

       this.setVisible(true);

    }

    public static void main(String args[]){

       MenuDemo test=new MenuDemo();

    }

}

 2,JPopupMenu 是一种特殊的 Menu,大家可能都接触过这个组件提供的功能,例如,我们在浏览 Word 文件时,按下鼠标右键,就会弹出一个PopupMenu。

  JPopupMenu 的弹出位置由鼠标指针和系统判断决定。它的构造函数有两种:

  (1) JPopupMenu() 建立一个 JPopupMenu 组件对象。

  (2) JPopupMenu(String title) 建立一个 JPopupMenu 组件对象并指定它的标题

弹出式菜单示例:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class JPopupMenuDemo extends JFrame{

    JTextField jTextField1=new JTextField(10);

    /* 创建一个弹出式菜单对象 */

    JPopupMenu popup=new JPopupMenu();

    public JPopupMenuDemo(){

       Container contentPane=this.getContentPane();

       JPanel jPanel1=new JPanel(new GridLayout(1,2));

       JLabel jLabel1=new JLabel("你选择的颜色:");

       jPanel1.add(jLabel1);

       jPanel1.add(jTextField1);

       ActionListener a1=new ActionListener(){

          public void actionPerformed(ActionEvent e){

             jTextField1.setText(((JMenuItem)e.getSource()).getText());

          }

       };

       JMenuItem jMenuItem1=new JMenuItem("红色"); /* 创建菜单项 */

       jMenuItem1.addActionListener(a1); /* 注册菜单项 */

       popup.add(jMenuItem1); /* 将菜单项添加到popup弹出式菜单中 */

       jMenuItem1=new JMenuItem("黄色");

       jMenuItem1.addActionListener(a1);

       popup.add(jMenuItem1);

       jMenuItem1=new JMenuItem("紫色");

       jMenuItem1.addActionListener(a1);

       popup.add(jMenuItem1);

       popup.addSeparator(); //添加分隔符

       jMenuItem1=new JMenuItem("蓝色");

       jMenuItem1.addActionListener(a1);

       popup.add(jMenuItem1);

       MYPopupListener p1=new MYPopupListener(); //创建一个弹出式菜单监听器对象

       addMouseListener(p1);

       jTextField1.addMouseListener(p1);

       contentPane.add(jPanel1);

       this.setTitle("JPopupMenuDemo");

       this.setSize(300,200);

       this.setLocation(400,400);

       this.setVisible(true);

    }

    class MYPopupListener extends MouseAdapter{

       public void mousePressed(MouseEvent e){

          showPopup(e); //显示弹出式菜单

       }

       public void mouseReleased(MouseEvent e){

          showPopup(e); //显示弹出式菜单

       }

       private void showPopup(MouseEvent e){

          /* boolean isPopupTrigger(MouseEvent e)

          * 如果 JPopupMenu 的当前安装 UI 将

          * MouseEvent 视为弹出菜单触发器,则返回 true。*/

          if(e.isPopupTrigger()){

             /* void show(Component invoker, int x, int y)

             * 在组件调用者的坐标空间中的位置 X、Y 显示弹出菜单。

             * Component getComponent()

             * 返回此 JPopupMenu 组件。

             * public int getX() 返回组件原点的当前 x 坐标。

             * public int getY() 返回组件原点的当前 y 坐标。 */

             popup.show(e.getComponent(),e.getX(),e.getY());

          }

       }

    }

    public static void main(String args[]){

       JPopupMenuDemo test=new JPopupMenuDemo();

    }

}


你可能感兴趣的:(JMenu 的使用)