Menu (AWT)

(Steven Shi, hi.steven@gmail.com, jdk 1.4.0, 2002/06/04)

 

底下的範例程式示範如何用AWT提供的功能表單類別實作出功能表單,要特別注意的是CheckboxMenuItemeventimplement ItemListener,和MenuItem implement ActionListener不一樣,其中ItemListener要改寫itemStateChangedActionListener要改寫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");

      }

    }

  }

}