目錄
01 菜單元件介紹
02 執行個體代碼
01 菜單元件介紹
菜單也是最常用的GUI元件之一,Swing包中提供了多種菜單元件,包括JMenuBar、JMenuItem、JMenu、JCheckBoxMenuItem、JRadioButtonMenuItem和JPopupMenu等。菜單有下拉式菜單和彈出式菜單兩種,本節介紹下拉式菜單,這是最常用的一類菜單
菜單欄及菜單
菜單欄是視窗中的主菜單,用來包容一組菜單。比如菜單欄中包含了3個下拉菜單,這3個菜單的名字分别是“File”“Option”和“Help”。菜單是最基本的下拉菜單,用來包容一組菜單項或子菜單,比如“File”中列出了4個菜單項。菜單欄隻有一種構造方法,即JMenuBar( )。JFrame、JApplet和JDialog等類中都定義setJMenuBar(JMenuBar menu)方法,可以把菜單欄放到視窗的上方,
例如:
JFrame frame = new JFrame(“ Menu Demo”);
// 菜單視窗标題是“ Menu Demo”
JMenuBarmb = new JMenuBar( );
// 建立菜單欄
frame.setJMenuBar(mb);
// 放到架構的上方
JMenuBar上也可以注冊一些事件偵聽程式,但通常情況下,對于JMenuBar上的使用者事件,都不進行處理。
菜單的常用構造方法如下。
•JMenu( ):構造沒有文本的新菜單。
•JMenu(String s):構造具有指定标簽的新菜單,String 型參數s指定了菜單上的文本。
•JMenu(String s,boolean b):構造具有指定标簽的新菜單,訓示該菜單是否可以分離。
02 執行個體代碼
執行個體代碼如下
package com.pc.java;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class Subject implements ItemListener,ActionListener {
JFrame frame=new JFrame("Menu Demo");
JTextField tf=new JTextField();
public static void main(String args[])
{
Subject s=new Subject();
s.GoApp();
}
public void go()
{
JMenuBar menubar=new JMenuBar();
frame.setJMenuBar(menubar);
JMenu menu1=new JMenu("File");
JMenu menu2=new JMenu("Edit");
menubar.add(menu1);
menubar.add(menu2);
frame.setSize(300, 200);
frame.setVisible(true);
}
public void GoApp()
{
JMenuBar menubar=new JMenuBar();
frame.setJMenuBar(menubar);
JMenu menu,submenu;
JMenuItem menuItem;
menu=new JMenu("File");
menu.setMnemonic(KeyEvent.VK_E);
menubar.add(menu);
menuItem=new JMenuItem("Open...");
menuItem.setMnemonic(KeyEvent.VK_O);
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1,ActionEvent.ALT_MASK));
menuItem.addActionListener((ActionListener)this);
menu.add(menuItem);
menuItem=new JMenuItem("Save",KeyEvent.VK_S);
menuItem.addActionListener(this);
menuItem.setEnabled(false);
menu.add(menuItem);
menuItem=new JMenuItem("Close");
menuItem.setMnemonic(KeyEvent.VK_C);
menuItem.addActionListener(this);
menu.add(menuItem);
menu.add(new JSeparator());
menuItem=new JMenuItem("Exit");
menuItem.setMnemonic(KeyEvent.VK_E);
menuItem.addActionListener(this);
menu.add(menuItem);
menu=new JMenu("Option");
menubar.add(menu);
menu.add("Font...");
submenu=new JMenu("Color...");
menu.add(submenu);
menuItem=new JMenuItem("Foreground");
menuItem.addActionListener(this);
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2,ActionEvent.ALT_MASK));
submenu.add(menuItem);
menuItem=new JMenuItem("BackGround");
menuItem.addActionListener(this);
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_3,ActionEvent.ALT_MASK));
submenu.add(menuItem);
menu.addSeparator();
JCheckBoxMenuItem cm=new JCheckBoxMenuItem("Always on Top");
cm.addItemListener(this);
menu.addItemListener(this);
menu.add(cm);
menu.addSeparator();
JRadioButtonMenuItem rm=new JRadioButtonMenuItem("Small",true);
rm.addItemListener(this);
menu.add(rm);
ButtonGroup group=new ButtonGroup();
group.add(rm);
rm=new JRadioButtonMenuItem("Large");
rm.addItemListener(this);
menu.add(rm);
group.add(rm);
menu=new JMenu("Help");
menubar.add(menu);
menuItem=new JMenuItem("about...",new ImageIcon("dukeWaveRed.gif"));
menuItem.addActionListener(this);
menu.add(menuItem);
tf.setEditable(false);
Container cp=frame.getContentPane();
cp.add(tf,BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,200);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
@Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
int state=e.getStateChange();
JMenuItem amenuItem=(JMenuItem)e.getSource();
String command=amenuItem.getText();
if(state==ItemEvent.SELECTED)
{
tf.setText(command+"SELECTED");
}
else
{
tf.setText(command+"DESELECTED");
}
}
}
最終實作效果如下