java学习——89.菜单(三)
每单击一个菜单项,应实现对应的功能。
菜单项是抽象按钮的子类,可以在菜单项上注册事件监听器,实现对应的功能。
以上篇中的示例为例:
注册事件监听器是在菜单项实例那里添加一行语句
item[m][n].addActionListener(this);
然后实现其功能。
方法事件如下:
public void actionPerformed(ActionEvent e){
if(e.getSource() instanceof JMenuItem){//判断是否单击的是菜单项
if(e.getActionCommand().equals("打开"))//如果单击的是打开菜单项
text.setText("将打开一个文件");//在文本区中提示
if(e.getActionCommand().equals("新建"))//如果单击的是新建菜单项
new JMenuLearn();//重新创建一个实例
if(e.getActionCommand().equals("退出"))//如果单击的是退出菜单项
System.exit(0); //系统退出
}
}
其运行结果如下:
(1)单击打开菜单项:
(2)单击新建菜单项,会新跳出来一个窗口:
如果单击退出菜单项会直接退出本程序。
其完整代码如下:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
public class JMenuLearn extends JFrame implementsActionListener{
private JMenuBar menubar;//菜单栏
private JMenu menu[];//菜单,因为有三个菜单,所以用数组的方式
private JMenuItem item[][];//菜单项,菜单项不止一个,所以用数组,一个菜单中有多个菜单项,所以用二维数组
private JTextArea text;
public JMenuLearn(){
super("菜单学习");
this.setLocationRelativeTo(null);
this.setSize(600, 600);
this.setVisible(true);
menubar=new JMenuBar();//创建菜单栏的实例
this.setJMenuBar(menubar);//将菜单栏置于窗口中
String s[]={"文件","编辑","格式"};//菜单项的标题
menu=new JMenu[s.length];//创建菜单数组,数组的长度看上一行有多少个标题
for(int i=0;i<s.length;i++)//因为有三个菜单,我用循环的方式添加至菜单栏中
{
menu[i]=new JMenu(s[i]);//创建菜单,菜单的标题为字符串对应的文字
menubar.add(menu[i]);//将菜单加入到菜单栏中
}
String is[][]={{"打开","新建","退出"},{"剪切","复制","粘帖"},{"字体","颜色"}};//每一个菜单下面菜单项的标题
for(int m=0;m<is.length;m++){//每一层循环,三个菜单
item=new JMenuItem[is.length][is[m].length];//创建菜单项组,大小与菜单项标题相同
for(int n=0;n<is[m].length;n++){//标题的大小
item[m][n]=new JMenuItem(is[m][n]);//创建每一个菜单项实例
menu[m].add(item[m][n]);//为每一个菜单添加相对应的菜单项
item[m][n].addActionListener(this);//为每一个菜单项注册事件监听
}
}
text=new JTextArea(6,6);
this.getContentPane().add(text);
}
publicvoid actionPerformed(ActionEvent e){
if(e.getSource() instanceof JMenuItem){//判断是否单击的是菜单项
if(e.getActionCommand().equals("打开"))//如果单击的是打开菜单项
text.setText("将打开一个文件");//在文本区中提示
if(e.getActionCommand().equals("新建"))//如果单击的是新建菜单项
new JMenuLearn();//重新创建一个实例
if(e.getActionCommand().equals("退出"))//如果单击的是退出菜单项
System.exit(0); //系统退出
}
}
publicstaticvoid main(String args[]){
new JMenuLearn();
}
}