首頁 > Java > java教程 > 主體

使用Java編寫圖形化的選單的教程

高洛峰
發布: 2017-01-17 11:34:29
原創
1302 人瀏覽過

有兩種類型的選單:下拉式選單和彈出式選單。本章只討論下拉式選單程式設計方法。選單與JComboBox和JCheckBox不同,它們在介面中是一直可見的。選單與JComboBox的相同之處是每次只可選擇一個項目。

在下拉式選單或彈出式選單中選擇一個選項就產生一個ActionEvent事件。該事件被發送給那個選項的監視器,事件的意義由監視器解釋。
選單條、選單和選單項目

下拉式選單透過出現在選單條上的名字視覺化表示,選單條(JMenuBar)通常出現在JFrame的頂部,一個選單條顯示多個下拉式選單的名字。可以用兩種方式來啟動下拉式選單。一種是按下滑鼠的按鈕,並保持按下狀態,移動滑鼠,直到釋放滑鼠完成選擇,高亮度顯示的選單項目即為所選的。另一種方式是當遊標位於選單條中的選單名稱上時,點擊滑鼠,在這種情況下,選單會展開,且高亮度顯示選單項目。

一個選單條可以放多個選單(JMenu),每個選單又可以有許多選單項目(JMenuItem)。例如,Eclipse環境的選單條有File、Edit、Source、Refactor等選單,每個選單又有許多選單項目。例如,File選單有New、Open File、Close 、Close All等選單項目。

向視窗增設選單的方法是:先建立一個選單條對象,然後再建立若干選單對象,把這些選單對象放在選單條裡,再依要求為每個選單對像新增選單項目。
選單中的選單項目也可以是一個完整的選單。由於選單項目又可以是另一個完整選單,因此可以建構一個層次狀選單結構。

1.選單條
類別JMenuBar的實例就是選單條。例如,以下程式碼建立選單條物件menubar:

JMenuBar menubar = new JMenuBar();
登入後複製

在視窗中增設選單條,必須使用JFrame類別中的setJMenuBar()方法。例如,程式碼:

setJMenuBar(menubar);
登入後複製

類別JMenuBar的常用方法有:

add(JMenu m):將選單m加入到選單列中。

countJMenus():取得選單條中選單條數。

getJMenu(int p):取得選單列中的選單。

remove(JMenu m):刪除選單條中的選單m。

2. 選單
由類別JMenu所建立的物件就是選單。類別JMenu的常用方法如下:

JMenu():建立一個空標題的選單。

JMenu(String s):建立一個標題為s的選單。

add(JMenuItem item):增加由參數item指定的選單選項。

add(JMenu menu):增加由參數menu指定的選單。實作在選單嵌入子選單。

addSeparator():在選單選項之間畫一條分隔線。

getItem(int n):得到指定索引處的選單項目。

getItemCount():得到選單項目數目。

insert(JMenuItem item,int n):在選單的位置n插入選單項目item.

remove(int n):刪除選單位置n的選單項目

removeAll():刪除選單的所有選單項目。

3.選單項目
類別JMenuItem 的實例就是選單項目。類別JMenuItem的常用方法如下:

JMenuItem():建構無標題的選單項目。

JMenuItem(String s):建構有標題的選單項目。

setEnabled(boolean b):設定目前單一項目是否可被選取。

isEnabled():傳回目前選單項目是否可被使用者選擇。

getLabel():得到選單項目的名稱。

setLabel():設定選單選項的名稱。

addActionListener(ActionListener e):為選單項目設定監視器。監視器接受點擊某個選單的動作事件。

4. 處理選單事件
選單的事件來源是用滑鼠點選某個選單項目。處理該事件的介面是ActionListener,要實作的介面方法是actionPerformed(ActionEvent e),取得事件來源的方法getSource().

【例】小應用程式示意視窗有選單條的實作方法。設有一個按鈕,當按鈕處於開啟視窗狀態時,按一下按鈕將開啟一個窗口,視窗設有一個選單條,有兩個選單,每個選單又各有三個選單項目。當一個選單項目被選取時,選單項目監視方法在文字方塊中顯示對應選單項目被選取字樣。

import java.applet.*
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MenuWindow extends JFrame implements ActionListener{
  public static JtextField text;
  private void addItem(JMenu Menu,String menuName,ActionListener listener){
    JMenuItem anItem = new JMenuItem(menuName);
    anItem.setActionCommand(menuName);
    anItem.addActionListener(listener);
    Menu.add(anItem);
  }
  public MenuWindow(String s,int w,int h){
    setTitle(s);
    Container con = this.getContentPane();
    con.setLayout(new BorderLayout());
    this.setLocation(100,100);
    this.setSize(w,h);
    JMenu menu1 = new JMenu("体育");
    addItem(menu1," 跑步",this);
    addItem(menu1," 跳绳",this);
    addItem(menu1,"打球",this);
    JMenu menu2 = JMenu("娱乐");
    addItem(menu2,"唱歌",this);
    addItem(menu2,"跳舞",this);
    addItem(menu2,"游戏",this);
    JMenuBar menubar = new JMenuBar();
    text = new JTextField();
    menubar.add(menu1);
    menubar.add(menu2);
    setJMenuBar(MenuBar);
    con.add(text,BorderLayout.NORTH);
  }
  public void actionPerformed(ActionEvent e){
    text.setText(e.getActionCommand()+"菜单项被选中!");
  }
}
public class Example6_5 extends Applet implements ActionListener{
  MenuWindow window;
  JButton button;
  boolean bflg;
  public void init(){
    button = new JButton("打开我的体育娱乐之窗");bflg =true;
    window = new MenuWindow("体育娱乐之窗",100,100);
    button.addActionListener(this);
    add(button);
  }
  public void actionPerformed(ActionEvent e){
    if(e.getSource()==button){
      if(bflg){
        window.setVisible(true);
        bflg = false;
        button.setLabel("关闭我的体育娱乐之窗");
      }
      else{
        window.setVisible(false);
        bflg = true;
        button.setLabel("打开我的体育娱乐之窗");
      }
    }
  }
}
登入後複製

 


5. 嵌入子選單
創建了一個選單,並建立多個選單項,其中某個選單項目又是一個(含其他選單項目的)選單,這就構成選單嵌套。例如,將上述程式中的相關程式碼改成如下:

Menu menu1,menu2,item4;
MenuItem item3,item5,item6,item41,item42;
登入後複製

另插入以下程式碼建立item41和item42選單項,並將它們加入item4選單中:

item41= new MenuItem(“东方红”);
item42 = new MenuItem(“牡丹”);
item4.add(item41);
item4.add(item42);
登入後複製

則點擊item4選單時,又會開啟兩個菜單項目供選擇。

6. 新增退出項
增設一個新的選單項,對該選單項目加入監視,對應的監視方法中使用System.exit()方法,就能實現點選該選單項目時退出Java執行環境。例如,以下示意代碼:

…
 
item7 = new MenuItem(“退出”);
item7.addActionListener(this);
…
public void actionPerformed(ActionEvent e){
if(e.getSource()==item7){
System.exit(0);
}
}
登入後複製

7.设置菜单项的快捷键
用MenuShortcut类为菜单项设置快捷键。构造方法是MenuShortcut(int key)。其中key可以取值KeyEvent.VK_A至KenEvent.VK_Z,也可以取 ‘a'到 ‘z'键码值。菜单项使用setShortcut(MenuShortcut k)方法来设置快捷键。例如,以下代码设置字母e为快捷键。

class Herwindow extends Frame implements ActionListener{
  MenuBar menbar;
  Menu menu;
  MenuItem item;
  MenuShortcut shortcut = new MenuShortcut(KeyEvent.VK_E);
  …
  item.setShortcut(shortcut);
  …
}
登入後複製


选择框菜单项

菜单也可以包含具有持久的选择状态的选项,这种特殊的菜单可由JCheckBoxMenuItem类来定义。JCheckBoxMenuItem对象像选择框一样,能表示一个选项被选中与否,也可以作为一个菜单项加到下拉菜单中。点击JCheckBoxMenuItem菜单时,就会在它的左边出现打勾符号或清除打勾符号。例如,在例6.5程序的类MenuWindow中,将代码

addItem(menu1,“跑步”,this);addItem(menu1,”跳绳”,this);
登入後複製

改写成以下代码,就将两个普通菜单项“跑步“和“跳绳”改成两个选择框菜单项:

JCheckBoxMenuItem item1 = new JCheckBoxMenuItem(“跑步”);
JCheckBoxMenuItem item2 = new JCheckBoxMenuItem(“跳绳”);
item1.setActionCommand(“跑步”);
item1.addActionListener(this);
menu1.add(item1);
item2.setActionCommand(“跳绳”);
item2.addActionListener(this);
menu1.add(item2);
登入後複製


更多使用Java编写图形化的菜单的教程相关文章请关注PHP中文网!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板