Menu (AWT)
(Steven Shi, hi.steven@gmail.com, jdk 1.4.0, 2002/06/04)
底下的範例程式示範如何用AWT提供的功能表單類別實作出功能表單,要特別注意的是CheckboxMenuItem的event要implement ItemListener,和MenuItem implement ActionListener不一樣,其中ItemListener要改寫itemStateChanged,ActionListener要改寫actionPerformed。
範例程式:

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class myMenu extends Applet implements ActionListener {
Button m_btnDisplay;
myMenuFrame m_mfWindow;
public void init() {
m_btnDisplay = new Button("Display the menu Window");
add(m_btnDisplay);
m_btnDisplay.addActionListener(this);
m_mfWindow = new myMenuFrame("Sample");
m_mfWindow.setSize(300, 200);
}
public void actionPerformed(ActionEvent event) {
if (event.getSource() == m_btnDisplay) {
m_mfWindow.setVisible(true);
this.setVisible(false);
}
}
}
class myMenuFrame extends Frame implements ActionListener, ItemListener {
MenuBar m_mbMB;
Menu m_mnFile, m_mnNew;
MenuItem m_miNewProject, m_miNewFile;
MenuItem m_miOpen, m_miSave, m_miExit;
CheckboxMenuItem m_cmAutoSave;
Label m_lblMsg;
myMenuFrame(String strTitle) {
super(strTitle);
m_lblMsg = new Label("Hello world!");
this.add(m_lblMsg, BorderLayout.SOUTH);
//功能表
m_mbMB = new MenuBar();
m_mnFile = new Menu("File");
m_mnNew = new Menu("New");
//子功能選單
m_miNewProject = new MenuItem("New Project");
m_miNewProject.setActionCommand("NewProject");
m_miNewProject.addActionListener(this);
m_mnNew.add(m_miNewProject);
m_miNewFile = new MenuItem("New File");
m_miNewFile.setActionCommand("NewFile");
m_miNewFile.addActionListener(this);
m_mnNew.add(m_miNewFile);
m_mnFile.add(m_mnNew);
//功能選單
m_miSave = new MenuItem("Save");
m_miSave.setActionCommand("Save");
m_miSave.addActionListener(this);
m_mnFile.add(m_miSave);
//加分隔線
m_mnFile.addSeparator();
//Checkbox功能選單
m_cmAutoSave = new CheckboxMenuItem("Auto Save");
m_cmAutoSave.setActionCommand("AutoSave");
m_cmAutoSave.addItemListener(this);
m_mnFile.add(m_cmAutoSave);
//加分隔線
m_mnFile.addSeparator();
//功能選單
m_miExit = new MenuItem("Exit");
m_miExit.setActionCommand("Exit");
m_miExit.addActionListener(this);
m_mnFile.add(m_miExit);
m_mbMB.add(m_mnFile);
setMenuBar(m_mbMB);
addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
);
}
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equalsIgnoreCase("NewProject")) {
m_lblMsg.setText("New Project");
}
else if (event.getActionCommand().equalsIgnoreCase("NewFile")) {
m_lblMsg.setText("New File");
}
else if (event.getActionCommand().equalsIgnoreCase("Save")) {
m_lblMsg.setText("Save");
}
else if (event.getActionCommand().equalsIgnoreCase("Exit")) {
m_lblMsg.setText("Exit");
System.exit(0);
}
else {
m_lblMsg.setText("Error: " + event.getActionCommand());
}
}
public void itemStateChanged(ItemEvent event) {
if (event.getSource() == m_cmAutoSave) {
if (((CheckboxMenuItem) event.getItemSelectable()).getState()) {
m_lblMsg.setText("AutoSave is checked");
}
else {
m_lblMsg.setText("AutoSave is not checked");
}
}
}
}