Java圖形用戶界面:高級組件綜合例子
作者:wwj_748
本文主要講解了Java圖形用戶界面的高級組建中和例子,下面是Java編寫的記事本以及相關(guān)源碼。
運(yùn)行結(jié)果截圖如下:
- /**
- 作者:wwj
- 日期:2012/4/18
- 功能:利用圖像用戶界面高級組件實(shí)現(xiàn)簡單記事本
- 說明:
- (1)創(chuàng)建一個(gè)名為“簡單記事本”窗口,在窗口中添加一個(gè)帶有滾動條的文本區(qū)。
- (2)在窗口中添加一個(gè)具有以下菜單的菜單欄:
- 1.“文件”菜單,包含“打開”、“保存”、“退出”的菜單項(xiàng),菜單間加分隔線,
- 添加事件處理方法,使菜單具有打開、保存文件及退出的功能。
- 2.“編輯”菜單,包含“復(fù)制”、“剪切”、“粘貼”的菜單項(xiàng),添加事件處理方法,
- 使菜單具有“復(fù)制”、“剪切”、“粘貼”的功能。
- 3.“格式”菜單,包含“格式設(shè)置”的二級子菜單;而二級“格式設(shè)置”子菜單,
- 包含 “自動換行”、“取消自動換行”、“斷行不斷字”、“取消斷行不斷字”的菜單項(xiàng),添加事件處理方法,
- 設(shè)置文本框自動換行和斷行不斷字的格式。
- (提示:JTextArea類中,使用setLineWrap(true)方法設(shè)置自動換行,使用setWrapStyleword(true)方法設(shè)置斷行不斷字,參考書本例8.7)
- (3)在窗口中添加工具欄,包含“打開”、“保存”、“復(fù)制”、“剪切”、“粘貼”圖片按鈕的工具欄,
- 添加事件處理方法,單擊相應(yīng)的按鈕能實(shí)現(xiàn)相應(yīng)的功能。
- (4)在窗口中添加彈出式菜單,包含“打開”、“保存”、“復(fù)制”、“剪切”、“粘貼”的菜單項(xiàng),
- 直接添加分隔線,添并加事件處理方法,選擇相應(yīng)的菜單項(xiàng)能實(shí)現(xiàn)相應(yīng)的功能。
- **/
- import java.awt.*;
- import javax.swing.*;
- import java.awt.event.*;
- import java.io.*;
- public class Nodepad extends JFrame
- {
- private JTextArea editor;
- private Container c;
- private Font f=new Font("sanserif",Font.PLAIN,12);
- //菜單欄成員屬性聲明
- private JMenuBar mb; //菜單棒
- private JMenu fileMenu; //文件菜單
- private JMenu editMenu; //編輯菜單
- private JMenu formatMenu; //格式菜單
- private JMenuItem fileMenuOpen,fileMenuSave,fileMenuExit; //文件菜單的菜單項(xiàng)
- private JMenuItem editMenuCopy,editMenuCut,editMenuPaste; //編輯菜單的菜單項(xiàng)
- private JMenu formatSet;//格式菜單第一級菜單
- private JMenuItem lineWrap,cancleLineWrap,wrapStyleWord,cancleWrapStyleWord;//格式菜單的第二級菜單
- //工具欄成員屬性聲明
- private JToolBar toolBar; //工具棒
- private JButton b1,b2,b3,b4,b5; //聲明5個(gè)按鈕,分別為:“打開”、“保存”、“復(fù)制”、“剪切”、“粘貼”
- //彈出式菜單屬性聲明
- private JPopupMenu pm;
- private JMenuItem item1,item2,item3,item4,item5;
- public Nodepad()
- {
- super("簡單記事本");
- setSize(400,300);
- try{
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
- } catch (Exception e){ System.err.println("不能被設(shè)置外觀的原因:"+e);}
- c=getContentPane(); //創(chuàng)建一個(gè)內(nèi)容面板
- editor = new JTextArea(); //創(chuàng)建一個(gè)文本區(qū)
- c.add(new JScrollPane(editor)); //設(shè)置滾動條,并添加到內(nèi)容面板
- //菜單欄的實(shí)現(xiàn)
- //文件菜單的實(shí)現(xiàn)
- mb = new JMenuBar(); //創(chuàng)建菜單棒
- fileMenu = new JMenu("文件(F)");//創(chuàng)建菜單
- fileMenuOpen = new JMenuItem("打開(O)...Ctrl+O");
- fileMenuSave = new JMenuItem("保存(S)...Ctrl+S");
- fileMenuExit = new JMenuItem("退出");
- JMHandler JM=new JMHandler(); //創(chuàng)建監(jiān)聽器
- fileMenuOpen.addActionListener(JM); //注冊監(jiān)聽器
- fileMenuSave.addActionListener(JM);
- fileMenuExit.addActionListener(JM);
- fileMenu.add(fileMenuOpen);
- fileMenu.add(fileMenuSave);
- fileMenu.addSeparator(); //添加分隔線
- fileMenu.add(fileMenuExit);
- fileMenu.setFont(f); //設(shè)置菜單中文體的字體
- //編輯菜單的實(shí)現(xiàn)
- editMenu = new JMenu("編輯(E)");
- editMenuCopy = new JMenuItem("復(fù)制(C) Ctrl+C");
- editMenuCut = new JMenuItem("剪切(T) Ctrl+X");
- editMenuPaste = new JMenuItem("粘貼(P) Ctrl+v");
- EMHandler EM=new EMHandler(); //創(chuàng)建監(jiān)聽器
- editMenuCopy.addActionListener(EM);//注冊監(jiān)聽器
- editMenuCut.addActionListener(EM);
- editMenuPaste.addActionListener(EM);
- editMenu.add(editMenuCopy);
- editMenu.add(editMenuCut);
- editMenu.add(editMenuPaste);
- editMenu.setFont(f);
- //格式菜單的實(shí)現(xiàn)
- formatMenu = new JMenu("格式(O)"); //創(chuàng)建菜單
- formatSet = new JMenu("格式設(shè)置"); //二級菜單
- lineWrap = new JMenuItem("自動換行"); //二級菜單項(xiàng)
- cancleLineWrap = new JMenuItem("取消自動換行");
- wrapStyleWord = new JMenuItem("斷行不斷字");
- cancleWrapStyleWord = new JMenuItem("取消斷行不斷字");
- FMHandler FM=new FMHandler(); //創(chuàng)建事件監(jiān)聽器
- lineWrap.addActionListener(FM); //注冊二級菜單項(xiàng)的監(jiān)聽器
- cancleLineWrap.addActionListener(FM);
- wrapStyleWord.addActionListener(FM);
- cancleWrapStyleWord.addActionListener(FM);
- formatSet.add(lineWrap);
- formatSet.add(cancleLineWrap);
- formatSet.addSeparator(); //添加分隔線
- formatSet.add(wrapStyleWord);
- formatSet.add(cancleWrapStyleWord);
- formatMenu.add(formatSet);
- formatMenu.setFont(f);
- //將菜單全部添加菜單棒里
- mb.add(fileMenu);
- mb.add(editMenu);
- mb.add(formatMenu);
- //工具欄的實(shí)現(xiàn)
- //按鈕分別為:“打開”、“保存”、“復(fù)制”、“剪切”、“粘貼”
- toolBar =new JToolBar(); //創(chuàng)建工具棒
- b1= new JButton(new ImageIcon("img/open.gif"));
- b2= new JButton(new ImageIcon("img/save.gif"));
- b3= new JButton(new ImageIcon("img/copy.gif"));
- b4= new JButton(new ImageIcon("img/cut.gif"));
- b5= new JButton(new ImageIcon("img/paste.gif"));
- TBHandler TB=new TBHandler(); //創(chuàng)建按鈕監(jiān)聽器
- b1.addActionListener(TB); b2.addActionListener(TB);
- b3.addActionListener(TB); b4.addActionListener(TB);
- b5.addActionListener(TB);
- //把按鈕全部添加到工具棒中
- toolBar.add(b1); toolBar.add(b2);
- toolBar.add(b3); toolBar.add(b4);
- toolBar.add(b5);
- //彈出菜單的實(shí)現(xiàn)
- pm =new JPopupMenu(); //創(chuàng)建彈出菜單
- item1 = new JMenuItem("打開");
- item2 = new JMenuItem("保存");
- item3 = new JMenuItem("復(fù)制");
- item4 = new JMenuItem("剪切");
- item5 = new JMenuItem("粘貼");
- JPHandler JP=new JPHandler();
- item1.addActionListener(JP); //注冊菜單項(xiàng)的鼠標(biāo)事件監(jiān)聽器
- item2.addActionListener(JP);
- item3.addActionListener(JP);
- item4.addActionListener(JP);
- item5.addActionListener(JP);
- editor.addMouseListener(JP); //注冊文本區(qū)的鼠標(biāo)事件監(jiān)聽器
- pm.add(item1); pm.add(item2);
- pm.add(item3); pm.add(item4);
- pm.add(item5);
- //把菜單欄、工具欄、彈出菜單添加到內(nèi)容面板
- setJMenuBar(mb); //顯示菜單欄
- c.add(toolBar,BorderLayout.NORTH);
- setVisible(true);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- //自定義類實(shí)現(xiàn)文件菜單項(xiàng)的事件處理
- private class JMHandler implements ActionListener
- {
- public void actionPerformed(ActionEvent e)
- {
- if(e.getSource()==fileMenuOpen){ loadFile(); }
- else if(e.getSource()==fileMenuSave){ saveFile(); }
- else{System.exit(0);}
- }
- }
- public void loadFile() //打開文件方法
- {
- JFileChooser fc=new JFileChooser();
- int r=fc.showOpenDialog(this);
- if(r==JFileChooser.APPROVE_OPTION)
- {
- File file=fc.getSelectedFile();
- try{ editor.read(new FileReader(file),null);}
- catch(IOException e){}
- }
- }
- public void saveFile() //保存文件的方法
- {
- JFileChooser fc=new JFileChooser();
- int r=fc.showSaveDialog(this);
- if(r==JFileChooser.APPROVE_OPTION)
- {
- File file=fc.getSelectedFile();
- try{ editor.write(new FileWriter(file));}
- catch(IOException e){}
- }
- }
- //編輯菜單菜單項(xiàng)的事件處理
- private class EMHandler implements ActionListener
- {
- public void actionPerformed(ActionEvent e)
- {
- if(e.getSource()==editMenuCopy) //實(shí)現(xiàn)復(fù)制功能
- {
- editor.copy();
- editor.requestFocus();
- }
- else if(e.getSource()==editMenuCut)//實(shí)現(xiàn)剪切功能
- {
- editor.cut();
- editor.requestFocus();
- }
- else //實(shí)現(xiàn)粘貼功能
- {
- editor.paste();
- editor.requestFocus();
- }
- }
- }
- //格式菜單二級菜單的菜單項(xiàng)的事件處理
- private class FMHandler implements ActionListener
- {
- public void actionPerformed(ActionEvent e)
- {
- if(e.getSource()==lineWrap){ editor.setLineWrap(true); }
- else if(e.getSource()==cancleLineWrap) { editor.setLineWrap(false);}
- else if(e.getSource()==wrapStyleWord) { editor.setWrapStyleWord(true);}
- else{ editor.setWrapStyleWord(false); }
- }
- }
- //自定義類實(shí)現(xiàn)工具欄的按鈕事件處理
- private class TBHandler implements ActionListener
- {
- public void actionPerformed(ActionEvent e)
- {
- if(e.getSource()==b1){ loadFile(); } //實(shí)現(xiàn)打開文件功能
- else if(e.getSource()==b2) {saveFile();} //實(shí)現(xiàn)保存文件功能
- else if(e.getSource()==b3) //文件復(fù)制
- {
- editor.copy();
- editor.requestFocus();
- }
- else if(e.getSource()==b4) //文件剪切
- {
- editor.cut();
- editor.requestFocus();
- }
- else //文件粘貼
- {
- editor.paste();
- editor.requestFocus();
- }
- }
- }
- //自定義類實(shí)現(xiàn)彈出式菜單的事件處理
- private class JPHandler implements ActionListener,MouseListener
- {
- public void actionPerformed(ActionEvent e)
- {
- if(e.getSource()==item1){ loadFile(); } //實(shí)現(xiàn)打開文件功能
- else if(e.getSource()==item2) {saveFile();} //實(shí)現(xiàn)保存文件功能
- else if(e.getSource()==item3) //文件復(fù)制
- {
- editor.copy();
- editor.requestFocus();
- }
- else if(e.getSource()==item4) //文件剪切
- {
- editor.cut();
- editor.requestFocus();
- }
- else //文件粘貼
- {
- editor.paste();
- editor.requestFocus();
- }
- }
- public void mouseReleased(MouseEvent e)
- {
- if(e.isPopupTrigger()) //判斷是否按下鼠標(biāo)右鍵
- pm.show(editor,e.getX(),e.getY()); //顯示彈出式菜單
- }
- public void mouseClicked(MouseEvent e){}
- public void mouseEntered(MouseEvent e){}
- public void mouseExited(MouseEvent e){}
- public void mousePressed(MouseEvent e){}
- }
- public static void main(String []args)
- {
- Nodepad N=new Nodepad();
- }
- }
原文鏈接:http://blog.csdn.net/wwj_748/article/details/7475950
【編輯推薦】
責(zé)任編輯:林師授
來源:
wwj_748的博客