天天看點

[Java桌面應用開發]菜單元件————(2020.5.18學習筆記)

目錄

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");
		
	}
}
}

           

最終實作效果如下

[Java桌面應用開發]菜單元件————(2020.5.18學習筆記)