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);;//居中顯示
}
}