通过java的swing和awt的API实现自定菜单和二级菜单。代码如下:
import java.awt.*;
import java.awt.event.*;
public class TestMenu2{
private Frame f = new Frame("测试窗口");
private Label message = new Label();
private PopupMenu pm;
public static void main( String args[]) {
new TestMenu2().createUI();
}
public void createUI(){
f.add(message,"Center");
MyMonitor mm = new MyMonitor();
MenuBar mb = new MenuBar();
Menu m1 = new Menu("文件");
Menu m2 = new Menu("格式");
Menu m3 = new Menu("帮助");
MenuItem m21 = new MenuItem("字体");
Menu m22 = new Menu("背景");
MenuItem bg_red = new MenuItem("红色");
MenuItem bg_blue = new MenuItem("蓝色");
MenuItem bg_green = new MenuItem("绿色");
MenuItem bg_customize = new MenuItem("用户自定义");
bg_red.addActionListener(mm);
bg_blue.addActionListener(mm);
bg_green.addActionListener(mm);
bg_customize.addActionListener(mm);
m22.add(bg_red);
m22.add(bg_blue);
m22.add(bg_green);
m22.addSeparator();
m22.add(bg_customize);
m2.add(m21);
m2.add(m22);
mb.add(m1);
mb.add(m2);
mb.add(m3);
f.setMenuBar(mb);
pm = new PopupMenu();
MenuItem start = new MenuItem("Start");
MenuItem stop = new MenuItem("Stop");
pm.add(start);
pm.add(stop);
start.addActionListener(mm);
stop.addActionListener(mm);
message.add(pm);
message.addMouseListener(mm);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
f.setSize(200,150);
f.setLocation(300,100);
f.setVisible( true);
}
public class MyMonitor extends MouseAdapter implements ActionListener{
public void actionPerformed(ActionEvent e){
String s = e.getActionCommand();
if(s.equals("红色")){
message.setBackground(Color.RED);
}else if(s.equals("蓝色")){
message.setBackground(Color.BLUE);
}else if(s.equals("绿色")){
message.setBackground(Color.GREEN);
}else if(s.equals("Start")){
message.setText("生活多美好!");
}else if(s.equals("Stop")){
message.setText("Bye-bye,the world!");
}
}
@Override
public void mousePressed(MouseEvent e){
if(e.isPopupTrigger()){
pm.show(message,e.getX(),e.getY());
}
}
@Override
public void mouseReleased(MouseEvent e){
if(e.isPopupTrigger()){
pm.show(message,e.getX(),e.getY());
}
}
}
}效果图如下:
