1. 程式人生 > >Java 100-006:選單欄的建立-包括巢狀選單,禁用選單項,複選框和單選按鈕選單項,彈出選單以及快捷鍵和加速器

Java 100-006:選單欄的建立-包括巢狀選單,禁用選單項,複選框和單選按鈕選單項,彈出選單以及快捷鍵和加速器

package java01;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 *   我的java每天100行程式碼006
 *   選單欄的建立:包括巢狀選單,禁用選單項,複選框和單選按鈕選單項,彈出選單以及快捷鍵和加速器;
 * @author Administrator
 *
 */
public class java006 {
		public static void main(String[] args) {
			
			EventQueue.invokeLater(new Runnable() {
				public void run() {
				//顯示視窗
					JFrame frame = new MenuFrame();
					frame.setTitle("MenuFrame");
					frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					frame.setVisible(true);
				
				}
			});
	}
}

class MenuFrame extends JFrame{
	private static final int DEFAULT_WIDTH = 300;
	private static final int DEFAULT_HEIGHT = 300;
	
	private Action saveAction;
	private Action saveAsAction;
	
	private JCheckBoxMenuItem readonlyItem;
	private JPopupMenu popup;
	
	public MenuFrame(){
		setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
		
		JMenu fileMenu = new JMenu("File");
		fileMenu.add(new TestAction("new"));
		
		JMenuItem openItem = fileMenu.add(new TestAction("open"));
		openItem.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));//設定快捷鍵
		fileMenu.addSeparator();//新增選單項中的分界線
		saveAction = new TestAction("save");
		JMenuItem saveItem =fileMenu.add(saveAction);//只有選單才能直接新增事件,選單項不行
		saveItem.setAccelerator(KeyStroke.getKeyStroke("ctel S"));
		saveAsAction = new TestAction("saveAs");
		JMenuItem saveAsItem =fileMenu.add(saveAsAction);
		fileMenu.addSeparator();
		
		fileMenu.add(new AbstractAction("exit") {
			public void actionPerformed(ActionEvent e) {
				System.out.println("0");
			}
		});
		
		readonlyItem = new JCheckBoxMenuItem("Read-only");
		readonlyItem.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				boolean saveOk = !readonlyItem.isSelected();
				saveAction.setEnabled(saveOk);
				saveAsAction.setEnabled(saveOk);
			}
		});
		
		//單選按鈕選單項
		ButtonGroup group = new ButtonGroup();
		
		JRadioButtonMenuItem insertItem = new JRadioButtonMenuItem("Insert");
		insertItem.setSelected(true);
		JRadioButtonMenuItem overTypeItem =
				new JRadioButtonMenuItem("Overtype");
		
		group.add(insertItem);
		group.add(overTypeItem);
		
		Action cutAction = new TestAction("Cut");
		cutAction.putValue(Action.NAME, "Cut");
		Action copyAction = new TestAction("Copy");
		cutAction.putValue(Action.NAME, "Copy");
		Action pasteAction = new TestAction("Paste");
		cutAction.putValue(Action.NAME, "Paste");
		
		JMenu editMenu = new JMenu("Edit");
		editMenu.add(cutAction);
		editMenu.add(copyAction);
		editMenu.add(pasteAction);
		
		JMenu optionMenu = new JMenu("Options");
		optionMenu.add(readonlyItem);
		optionMenu.addSeparator();
		optionMenu.add(insertItem);
		optionMenu.add(overTypeItem);
		
		editMenu.addSeparator();
		editMenu.add(optionMenu);
		
		JMenu helpMenu = new JMenu("Help");
		helpMenu.setMnemonic('H');//設定快捷鍵Alt+H即可調出Help選單,這裡要用單引號
		
		JMenuItem indexItem = new JMenuItem("Index");
		indexItem.setMnemonic('I');
		helpMenu.add(indexItem);
		
		Action aboutAction = new TestAction("About");
		aboutAction.putValue(Action.MNEMONIC_KEY, new Integer('A'));
		helpMenu.add(aboutAction);
		
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		
		menuBar.add(fileMenu);
		menuBar.add(editMenu);
		menuBar.add(helpMenu);
		
		//設計選單項可彈出
		popup = new JPopupMenu();
		popup.add(cutAction);
		popup.add(copyAction);
		popup.add(pasteAction);
		
		JPanel panel = new JPanel();
		panel.setComponentPopupMenu(popup);
		add(panel);
		
		panel.addMouseListener(new MouseAdapter() {});
		
	}
	
	class TestAction extends AbstractAction{	
		public TestAction(String name) {
			super(name);
		}
		public void actionPerformed(ActionEvent e) {
			System.out.println(getValue(Action.NAME)+"selected");		
		}	
	}
}