在做这个实验之前,先理顺一下这三者之间的关系:JMenuBar,JMenu,JMenuItem的关系
在一个窗口中,我们经常需要给窗口添加菜单条。在 Java 中这一部分是由三个类实现的,它们是JMenuBar、JMenu和JMenuItem,分别对应菜单条、菜单和菜单项。
同时,可以给JMenuItem注册侦听器,但不能对JMenuBar,JMenu注册侦听器.
.tH1~ o~}1J!Q1N0
一、菜单条(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),可以是一个子菜单,也可以是分隔符。
在构造完后,使用 JMenu 类的 add 方法添加到菜单中。
子菜单的添加是直接将一个子菜单添加到母菜单中,而分隔符的添加只需要将分隔符作为菜单项添加到菜单中。
代码实现如下;
import java.awt.Color;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.PopupMenu;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JTextArea;
class ColorMenu extends JFrame implements ActionListener {
//定义菜单条
MenuBar MenuBar1;
//往菜单条上添加菜单
Menu Menu1;
//往菜单上添加菜单选项
MenuItem item1,item2,item3,item4,item5,item6,item7,item8;
//定义文本框
JTextArea ta;
//只要有菜单的地方都可以使用PopMenu.相当于是弹出菜单
PopupMenu popupMenu1;
public ColorMenu(){
//定义了菜单条,往菜单条上添加了菜单
MenuBar1=new MenuBar();
Menu1=new Menu("这儿定义了菜单");
setMenuBar(MenuBar1);
MenuBar1.add(Menu1);
//Ctrl+1.2.3.4代表的都是快捷键
//item1.2.3.4代表的是菜单选项
MenuShortcut shortcut1=new MenuShortcut(KeyEvent.VK_1);
item1=new MenuItem("红色",shortcut1);
MenuShortcut shortcut2=new MenuShortcut(KeyEvent.VK_2);
item2=new MenuItem("绿色",shortcut2);
MenuShortcut shortcut3=new MenuShortcut(KeyEvent.VK_3);
item3=new MenuItem("蓝色",shortcut3);
MenuShortcut shortcut4=new MenuShortcut(KeyEvent.VK_4);
item4=new MenuItem("退出",shortcut4);
//往菜单上添加菜单选项
Menu1.add(item1);
Menu1.add(item2);
Menu1.add(item3);
Menu1.addSeparator();//把分割线或者字符添加到此处
Menu1.add(item4);
//添加动作监听器,此菜单接受动作事件
item1.addActionListener(this);
item2.addActionListener(this);
item3.addActionListener(this);
item4.addActionListener(this);
item5=new MenuItem("右键:红色");
item6=new MenuItem("右键:绿色");
item7=new MenuItem("右键:蓝色");
item8=new MenuItem("右键:退出");
//添加文本框
ta=new JTextArea();
add(ta);
//对文本框添加右键弹出框
popupMenu1=new PopupMenu();
ta.add(popupMenu1);
//文本框添加监听事件
ta.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(e.getModifiers()==MouseEvent.BUTTON3_MASK){
popupMenu1.show(ta, e.getX(), e.getY());
}
}
});
//对于右键弹出菜单添加菜单选项
popupMenu1.add(item5);
popupMenu1.add(item6);
popupMenu1.add(item7);
popupMenu1.addSeparator();
popupMenu1.add(item8);
//对于右键弹出菜单中的菜单选项添加事件监听
item5.addActionListener(this);
item6.addActionListener(this);
item7.addActionListener(this);
item8.addActionListener(this);
setSize(230,200);
setTitle("色彩与菜单");
setVisible(true);
//因为是抽象类,所以不能用new 实例化,可以用getDefaultToolkit返回Toolkit类的对象
double scr_width=Toolkit.getDefaultToolkit().getScreenSize().getWidth();
double scr_height=Toolkit.getDefaultToolkit().getScreenSize().getHeight();
double x1=(scr_width-getWidth())/2;
double y1=(scr_height-getHeight())/2;
int x=new Double(x1).intValue();
int y=new Double(y1).intValue();
setLocation(x, y);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
/**
* 因为对于各个菜单选项都定义了事件监听。所以this,单点击的时候,会自动的调用这个函数
*/
public void actionPerformed(ActionEvent e){
if(e.getSource()==item1){
ta.setBackground(Color.red);
}
if(e.getSource()==item2){
ta.setBackground(Color.green);
}
if(e.getSource()==item3){
ta.setBackground(Color.blue);
}
if(e.getSource()==item4){
System.exit(0);
}
if(e.getSource()==item5){
ta.setBackground(Color.PINK);
}
if(e.getSource()==item6){
ta.setBackground(Color.gray);
}
if(e.getSource()==item7){
ta.setBackground(Color.black);
}
if(e.getSource()==item8){
System.exit(0);
}
}
}
public class Kuaijie {
public static void main(String args[]){
new ColorMenu();
}
}