1. 程式人生 > >Java swing要點總結(三)

Java swing要點總結(三)

選單欄

選單及其事件處理

要開發一個框架視窗的選單,首現需要利用JMenuBar類建立一個選單條,然後在選單條上新增一系列的選單物件,選單物件可由JMenu類建立。為使滑鼠單擊選單條上的選單時,可展示出各種功能的選單項,必須利用JMenuItem類建立各個選單項,並將選單項新增到相應的選單上,上圖所示為選單各元件及其關係。

以下是建立選單時比較常用的一些方法。

(1)JMenuBar()

此為JMenuBar類最常用的一個建構函式。

(2)void setMenuBar(JMenuBar menubar)

JFrame類提供了此方法來把選單條放置在JFrame框架視窗中。

(3)JMenu(String s)

此為JMenu最常用的一個可設定選單文字的建構函式。

(4) JMenu add(JMenu c)

此為JMenuBar類提供的用來設定選單項分割條的方法。

(5)void addSepartor()

此為JMenu類提供的用來設定選單項分割條的方法。

(6)JMenuItem(String text)

此為JMenuItem類的一個建立選單項的建構函式,可設定選單項的文字。

(7)JMenuItem(String text,Icon icon)

這個JMenuItem類的建構函式可建立一個帶文字和圖示的選單項。

(8)JMenuItem add(JMenuItem menuItem)

JMenu類提供了此方法來將選單項新增到選單上。

(9)void setAccelerator(KeyStroke keyStroke)

JMenuItem類提供了此方法來設定選單項的快捷鍵。引數的KeyStroke類也是位於swing包中。

(10) static KeyStroke getKeyStroke(int keyCode,int modifiers,boolean onKeyRelease)

KeyStroke類提供此靜態方法來取得用於設定快捷鍵的KeyStroke物件,引數keyCode可取值於java.awt.KeyEvent類定義的虛擬鍵。

下面是用java實現記事本的開啟,儲存,以及退出的功能程式碼如下:

package njci.software.view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileNameExtensionFilter;

public class MyFrame extends JFrame {
	private static final long serialVersionUID = 4232937812480671357L;
	public MyFrame(){
		
		this.setTitle("我的第一個記事本");
		this.setSize(400,300);
		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		this.setLocationRelativeTo(null);  //居中顯示
		
		//為按鈕新增一個單機事件
		JButton jbn=new JButton("系統配置");
		//frmMain.add(jbn);
		//jbn.setBounds(10, 10, 100, 20);
		jbn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int result=JOptionPane.showConfirmDialog(null, "系統配置","提示",JOptionPane.YES_NO_OPTION);
				if(JOptionPane.YES_OPTION==result){
					//ConfigDialog dlgConfig=new ConfigDialog(this);
					//dlgConfig.setVisible(true);
				}
			}
		});
		createMenu(this);
		this.setVisible(true);
		
	}

	/**新增一個選單欄
	 * 
	 */
	public void createMenu( final JFrame frame){
		JMenuBar menuBar=new JMenuBar();
		//檔案選單
		JMenu menuFile=new JMenu("檔案(F)");
		
		JMenuItem itemNew=new JMenuItem("新建(N)");
		//新增一個快捷鍵
		itemNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,KeyEvent.CTRL_MASK));
		//給新建按鈕新增一個事件
		itemNew.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
		JMenuItem itemOpen=new JMenuItem("開啟(O)...");
		//開啟事件
		itemOpen.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				JFileChooser chooser = new JFileChooser();
				FileNameExtensionFilter filter = new FileNameExtensionFilter(
				"TXT", "txt");
				chooser.setFileFilter(filter);
				int returnVal = chooser.showOpenDialog(getParent());//getparent
				if(returnVal == JFileChooser.APPROVE_OPTION) {
				System.out.println("You chose to open this file: " +
				chooser.getSelectedFile().getName());
				}
			 
				
			}
		});
		//新增一個快捷鍵
		itemOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,KeyEvent.CTRL_MASK));
		JMenuItem itemSave=new JMenuItem("儲存(S)...");
		itemSave.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
		        JFileChooser chooser = new JFileChooser();// 建立檔案選擇器
		       // int option = chooser.showDialog(getparent, approveButtonText);// 開啟檔案儲存對話方塊
				
			}
		});
		//新增一個快捷鍵
		itemSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,KeyEvent.CTRL_MASK));
		JMenuItem itemSaveAs=new JMenuItem("另存為(A)...");
		JMenuItem itemConfig=new JMenuItem("系統配置(C)...");
		itemConfig.addActionListener(new ActionListener() { //設定系統配置彈出來的新窗體
			
			@Override
			public void actionPerformed(ActionEvent e) {
					ConfigDialog dlgConfig=new ConfigDialog(frame);
					dlgConfig.setVisible(true);
				
			}
		});
		
		
		JMenuItem itemPrint=new JMenuItem("列印(p)...");
		//新增一個快捷鍵
		itemPrint.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,KeyEvent.CTRL_MASK));
		JMenuItem itemExit=new JMenuItem("退出(X)");
		//給退出按鈕新增一個時間
		itemExit.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int result=JOptionPane.showConfirmDialog(null, "退出","提示",JOptionPane.YES_NO_OPTION);
				if(JOptionPane.YES_OPTION==result){
				System.exit(0);
				
			}}
		});
		//新增記憶鍵
		menuFile.setMnemonic('F');
		itemNew.setMnemonic('N');
		//itemOpen.setMnemonic("");
		//新增快捷鍵
		itemExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,KeyEvent.CTRL_MASK));
		menuFile.add(itemNew);
		menuFile.add(itemOpen);
		menuFile.add(itemSave);
		menuFile.add(itemSaveAs);
		menuFile.add(new JSeparator()); //新增一個分隔線
		menuFile.add(itemConfig);
		menuFile.add(itemPrint);
		menuFile.add(new JSeparator());  //新增一個分隔線
		menuFile.add(itemExit);
		menuBar.add(menuFile);
		//編輯鍵設定
		JMenu menuEdit=new JMenu("編輯(E)");
		JMenuItem itemCancel=new JMenuItem("撤銷(U)");
		//新增一個快捷鍵
		itemCancel.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,KeyEvent.CTRL_MASK));
		JMenuItem itemCut=new JMenuItem("剪下(T)");
		//新增一個快捷鍵
		itemCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,KeyEvent.CTRL_MASK));
		JMenuItem itemCopy=new JMenuItem("複製(C)");
		itemCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,KeyEvent.CTRL_MASK));
		JMenuItem itemPaste=new JMenuItem("貼上(P)");
		itemPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,KeyEvent.CTRL_MASK));
		JMenuItem itemDelete=new JMenuItem("刪除(L)");
		//刪除快捷鍵
		itemDelete.setAccelerator(KeyStroke.getKeyStroke((char)KeyEvent.VK_DELETE)); //需要強制轉換
		JMenuItem itemFind=new JMenuItem("查詢(F)...");
		itemFind.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,KeyEvent.CTRL_MASK));
		JMenuItem itemFindNext=new JMenuItem("查詢下一個(N)");
		itemFindNext.setAccelerator(KeyStroke.getKeyStroke("F3"));
		JMenuItem itemReplace=new JMenuItem("替換(R)...");
		itemReplace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,KeyEvent.CTRL_MASK));
		JMenuItem itemGo=new JMenuItem("轉到(G)...");
		itemGo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,KeyEvent.CTRL_MASK));
		JMenuItem itemCheckall=new JMenuItem("全選(A)");
		itemCheckall.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,KeyEvent.CTRL_MASK));
		JMenuItem itemDate=new JMenuItem("時間/日期(D)");
		itemDate.setAccelerator(KeyStroke.getKeyStroke("F5"));
		menuEdit.add(itemCancel);
		menuEdit.add(new JSeparator()); //新增一個分隔線
		menuEdit.add(itemCut);
		menuEdit.add(itemCopy);
		menuEdit.add(itemPaste);
		menuEdit.add(itemDelete);
		menuEdit.add(new JSeparator()); //新增一個分隔線
		menuEdit.add(itemFind);
		menuEdit.add(itemFindNext);
		menuEdit.add(itemReplace);
		menuEdit.add(itemGo);
		menuEdit.add(new JSeparator()); //新增一個分隔線
		menuEdit.add(itemCheckall);
		menuEdit.add(itemDate);
		menuBar.add(menuEdit);
		//格式鍵設定
		JMenu menuFormat=new JMenu("格式(O)");
		JMenuItem itemNewline=new JMenuItem("自動換行(W)");
		JMenuItem itemFont=new JMenuItem("字型(F)...");
		menuFormat.add(itemNewline);
		menuFormat.add(itemFont);
		menuBar.add(menuFormat);
		//檢視鍵設定
		JMenu menuSee=new JMenu("檢視(V)");
		JMenuItem itemStatus=new JMenuItem("狀態列(S)");
		menuSee.add(itemStatus);
		menuBar.add(menuSee);
		//幫助鍵設定
		JMenu menuHelp=new JMenu("幫助(H)"); 
		JMenuItem  itemSeeHelp=new JMenuItem("檢視幫助(H)");
		JMenuItem  itemAbout=new JMenuItem("關於記事本(A)");
		menuHelp.add(itemSeeHelp);
		menuHelp.add(itemAbout);
		menuBar.add(menuHelp);
		frame.setJMenuBar(menuBar);
		
	}
	
	
	
public static void main(String[] args){
	new MyFrame();
	
}
}
package njci.software.view;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class ConfigDialog extends JDialog {

	/**
	 * 
	 */
	private static final long serialVersionUID = -713398359834685238L;
	public ConfigDialog(final JFrame frame){
		super(frame,"這是一個對話方塊",true);
		//Container container=getContentPane(); //建立一個容器
		//container.add(new JLabel("這是一個對話方塊")); //在容器中新增標籤
		//新增內部控制元件
		JPanel pnlConfig=new JPanel();
		pnlConfig.setLayout(null);
		final JLabel lblWidth=new JLabel("寬度");
		final JLabel lblHeight=new JLabel("高度");
		final JTextField txtWidth=new JTextField();
		final JTextField txtHeight=new JTextField();
		JButton btnSave=new JButton("儲存");
		btnSave.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int width=Integer.parseInt(txtWidth.getText());
				int height=Integer.parseInt(txtHeight.getText());
				frame.setSize(width,height);
			}
		});
		JButton btnCancel=new JButton("取消");
		
		//進行佈局
		
		lblWidth.setBounds(50,30,60,40);
		txtWidth.setBounds(150,30,160,40);
		lblHeight.setBounds(50,100,60,40);
		txtHeight.setBounds(150,100,160,40);
		btnSave.setBounds(50,160,100,40);
		btnCancel.setBounds(200,160,100,40);
		pnlConfig.add(lblWidth);
		pnlConfig.add(txtWidth);
		pnlConfig.add(lblHeight);
		pnlConfig.add(txtHeight);
		pnlConfig.add(btnSave);
		pnlConfig.add(btnCancel);
		this.add(pnlConfig);
		this.setSize(400,320);
		this.setResizable(false);//窗體大小不可改變
		this.setLocationRelativeTo(frame);;//居中顯示
		
	}

}