一般窗口类都需要创建菜单条(MenuBar),菜单(Menu)和菜单项(MenuItem),通常,一个菜单条含有几个菜单,一个菜单又含有几个菜单项。菜单项在菜单中表示一个选项,并且可以注册一个动作监听器(ActionListener),以产生动作事件。
一个完整的菜单条程序
import java.awt.*;
import java.awt.event.*;
import org.omg.CORBA.PUBLIC_MEMBER;
public class MenuTest extends Frame implements
ActionListener
{
//定义几个菜单项
private MenuItem fileNewItem = new
MenuItem("New");
private MenuItem fileopenItem = new
MenuItem("OPEN");
private MenuItem fileExitItem= new
MenuItem("EXIT");
private MenuItem editCopyItem = new
MenuItem("COPY");
private MenuItem editCutItem = new
MenuItem("CUT");
private MenuItem editPasteItem = new
MenuItem("PASTE");
//在构造函数中完成主框架的布局工作
public MenuTest()
{
//调用父类的构造函数,是框架的标题为Menu Test
Program
super("Menu Test
Program");
//定义一个菜单,并将几个菜单项添加到菜单里面
Menu fileMenu = new
Menu("FILE");
fileMenu.add(fileNewItem);
fileMenu.add(fileopenItem);
fileMenu.add(fileExitItem);
Menu editMenu = new
Menu("EDIT");
editMenu.add(editCopyItem);
editMenu.add(editCutItem);
editMenu.add(editPasteItem);
MenuBar fileMenuBar =new
MenuBar();
fileMenuBar.add(editMenu);
fileMenuBar.add(fileMenu);
//在程序中添加菜单条
setMenuBar(fileMenuBar);
//为Exit菜单项注册监听事件
fileExitItem.addActionListener(this);
setSize(200, 200);
//如不添加这个函数对话框不会显示出来。deprecated:不赞成的
show();
}
//若点击exit按钮,则弹出对话框
@Override
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method
stub
if(e.getSource()==fileExitItem)
{
ConfirmDialog
exit = new ConfirmDialog(this, "Confirm exit", "Do you really want
to exit?");
if(exit.isOkay)
{System.exit(0);}
}
}
//每个JAVA应用程序中都应该包含main函数
public static void main(String args[])
{
//实例化MenuTest类
MenuTest f = new
MenuTest();
}
}
对话框的初始化设置程序
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Area;
public class ConfirmDialog extends Dialog implements
ActionListener
{
private Button okayButton = new
Button("确定");
private Button cancelButton = new
Button("取消");
private Label label = new Label("are you sure?",
Label.CENTER);
public boolean isOkay = false;
//定义一个内部类,若按关闭窗口键,对话框隐藏。
public class WindowCloser extends
WindowAdapter
{
@Override
public void
windowClosing(WindowEvent e) {
// TODO
Auto-generated method stub
super.windowClosing(e);
ConfirmDialog.this.isOkay=false;
ConfirmDialog.this.hide();
}
}
public ConfirmDialog(Frame owner) {
// TODO Auto-generated
constructor stub
//调用本类含三个参数的构造函数
this(owner, "please
confirm","Are you sure?");
}
public ConfirmDialog(Frame parent, String
title, String question)
{
super(parent, title,
true);
label.setText(question);
setup();
okayButton.addActionListener(this);
cancelButton.addActionListener(this);
addWindowListener(new
WindowCloser());
setResizable(false);
pack();show();
}
private void setup()
{
//panel是一个简单的容器类,可以在Panle上面添加各种各样的组件
Panel buttons = new
Panel();
buttons.setLayout(new
FlowLayout());
buttons.add(okayButton);
buttons.add(cancelButton);
setLayout(new
BorderLayout());
add("Center", label);
add("South",
buttons);
}
@Override
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method
stub
isOkay=(e.getSource()==okayButton);
hide();
}
}
加载中,请稍候......