亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Java的記事本程序的設(shè)計(jì)與實(shí)現(xiàn)

        2017-11-17 09:08:47張會
        電腦知識與技術(shù) 2017年30期

        張會

        摘要:該文利用 Java Swing,輸入輸出流,事件處理等技術(shù)實(shí)現(xiàn)了一個(gè)記事本小程序。記事本具有新建,保存,另存為,設(shè)置字體,設(shè)置顏色及退出等功能。記事本是一個(gè)集Java Swing、輸入輸出流、事件處理等知識綜合應(yīng)用的實(shí)例程序。

        關(guān)鍵詞:輸入輸入出流;事件處理;記事本;Java Swing

        中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2017)30-0088-03

        Notepad(記事本)是Windows系統(tǒng)中一款小巧的純文本編輯器,常用做源程序編輯器,具有打開速度快,文件小等特點(diǎn),若只保存為純文本文件最好使用記事本。文中的記事本采用Java Swing, 輸入輸出流、事件處理等相關(guān)技術(shù)進(jìn)行設(shè)計(jì)及開發(fā),使初學(xué)者快速掌握及使用Java中的Java Swing、輸入輸出流、事件處理等相關(guān)技術(shù)進(jìn)行Java程序開發(fā)有較大幫助,并對《Java程序設(shè)計(jì)》課程相關(guān)知識點(diǎn)的綜合實(shí)踐教學(xué)具有一定指導(dǎo)作用。

        1 記事本設(shè)計(jì)

        1.1 功能設(shè)計(jì)

        記事本能夠?qū)崿F(xiàn)以下功能:

        1) 保存:對于新建文件,單擊保存選項(xiàng),則彈出保存對話框,實(shí)現(xiàn)對記事本中的內(nèi)容命名并保存;對于已命名文件,單擊保存選項(xiàng),不會彈出保存對話框,直接實(shí)現(xiàn)原名保存。

        2) 另存為:實(shí)現(xiàn)換名或換位置保存。

        3) 打開:實(shí)現(xiàn)打開一個(gè)純文本文件,如*.txt,*.cpp,*.java等純文本文件。

        4) 保存提示:對新建的文件輸入了內(nèi)容或?qū)Υ蜷_的文件作了修改并直接退出記事本時(shí),會提示是否保存修改。

        5) 設(shè)置字體顏色:Windows系統(tǒng)中的記事本,未實(shí)現(xiàn)對文本內(nèi)容設(shè)置字體顏色功能,本程序?qū)崿F(xiàn)了對記事本中的文字設(shè)置字體顏色。

        6) 設(shè)置字體、字形、字號:實(shí)現(xiàn)了對文本設(shè)置字體、字形、字號功能。

        1.2 界面設(shè)計(jì)

        Swing是Java的GUI(圖形用戶界面)工具包,包括了GUI組件,如:菜單欄、菜單項(xiàng)、按鈕、面板、文本框等組件。本設(shè)計(jì)利用了Swing中的相關(guān)組件實(shí)現(xiàn)了如圖1,圖2所示的記事本。其中使用JFrame做為頂層窗體容器,在其上添加了JMenuBar(菜單欄),JMenu(記事本菜單)及菜單下的JMenuItem(菜單項(xiàng))組件,另外在JFrame容器中添加了一個(gè)JPanel面板,再在JPanel中添加了一個(gè)JTextArea組件,JTextArea對象用來顯示或編輯記事本文件中的內(nèi)容。

        圖1 記事本界面1

        圖2 記事本界面2

        2 記事功能實(shí)現(xiàn)

        2.1 記事各功能事件處理實(shí)現(xiàn)

        本記事本具有打開文件,新建文件,保存、另存為、字體設(shè)置、顏色設(shè)置等功能,當(dāng)鼠標(biāo)單擊這些選項(xiàng)時(shí),將會對應(yīng)不同的功能操作。這些操作都是通過Java中的事件處理技術(shù)實(shí)現(xiàn)。當(dāng)單擊菜單中某菜單選項(xiàng)時(shí),會產(chǎn)生一個(gè)ActionEvent事件,然后Java虛擬機(jī)檢查是否有與該菜單項(xiàng)相關(guān)聯(lián)的事件處理器,事件處理器實(shí)質(zhì)是一個(gè)方法,如actionPerformed()方法,如果沒有,不做任何處理;若有則將事件對象傳遞給與之關(guān)聯(lián)的事件處理器方法作為事件處理方法參數(shù),并自動調(diào)用事件處理方法。Java虛擬機(jī)通過傳遞過來的ActionEvent對象,獲得事件發(fā)生時(shí)與該事件及事件源相關(guān)聯(lián)的信息。Java組件通過形如addXxxListener()的方法添加事件監(jiān)聽器。

        一個(gè)事件源可以添加多個(gè)監(jiān)聽器,而本記事本中的事件源是菜單中的各菜單項(xiàng),在菜單項(xiàng)上發(fā)生鼠標(biāo)單擊事件,因此在每個(gè)菜單項(xiàng)上添加addActionListener()方法添加事件監(jiān)聽器,并實(shí)現(xiàn)事件處理actionPerformed()方法給出具體的功能實(shí)現(xiàn)。

        為記事本中各菜單項(xiàng)添加事件監(jiān)聽器代碼如下:

        newfile.addActionListener(this);

        open.addActionListener(this);

        save.addActionListener(this);

        exit.addActionListener(this);

        saveas.addActionListener(this);

        fontColor.addActionListener(this);

        font.addActionListener(this);

        事件處理actionPerformed()方法代碼如下:

        public void actionPerformed(ActionEvent e) {

        JMenuItem item=(JMenuItem)e.getSource();//獲得事件源

        if(item==open){

        openFile(); //打開文件

        }else if(item==save){

        saveFile(); //保存文件

        }else if(item==saveas){

        saveasFile(); //另存為文件

        }else if(item==newfile){

        newFile(); //新建文件

        }else if(item==exit){

        exitNotepad (); //退出記事本

        }else if(item==fontColor){

        setFontColor(); //字體顏色設(shè)置

        }else if(item==font){

        setFont(); //字體設(shè)置

        }}

        2.2 打開文件

        實(shí)現(xiàn)記事本的打開功能,實(shí)質(zhì)是把要打開的文件內(nèi)容讀入到內(nèi)存再顯示在記事本中。在Java中,是通過流來實(shí)現(xiàn)數(shù)據(jù)的輸入輸出。Java中的流有兩種類型,分別是字節(jié)流和字符流,其中字符流只處理文本化的數(shù)據(jù),而本記事本程序讀寫都是文本文件,因此本程序輸入和輸出操作都是針對字符數(shù)據(jù)流操作,而FileReader,F(xiàn)ileWriter是用來讀寫字符流的主要類。因此本程序使用FileReader,F(xiàn)ileWrite兩個(gè)類提供的read(),write()方法實(shí)現(xiàn)文件打開和保存操作。

        打開文件代碼如下:

        public void openFile(){

        area.setText(null);

        fileChooser=new JFileChooser();//創(chuàng)建一個(gè)不可見的文件選擇對話框

        //顯示文件選擇對話框并確定打開所選擇文件

        if(fileChooser.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){ file=fileChooser.getSelectedFile();

        char content[]=new char[30];

        int length;

        try {reader=new FileReader(file);

        while((length=reader.read(content))!=-1){

        String str=new String(content, 0, length);

        this.textArea.append(str);

        }

        reader.close();

        this.setTitle(file.getName());

        oldStr=textArea.getText();

        } catch (Exception e) { e.printStackTrace();}

        }}

        在實(shí)現(xiàn)打開功能時(shí),通過JFileChooser類的showOpenDialog()方法顯示打開文件對話框,當(dāng)選擇了要打開的文件并確認(rèn)打開操作后,該方法的返回值與JFileChooser.APPROVE_OPTION相等時(shí),使用JFileChooser對象的getSelectedFile()獲得打開文件file對象,再通過FileReader對象與打開的文件關(guān)聯(lián),建立輸入流對象reader,通過輸入流對象reader調(diào)用read()方法循環(huán)讀入文件內(nèi)容至content數(shù)組中,再把數(shù)組內(nèi)容追加在記事本中用于顯示和編輯的textArea組件中。從而達(dá)到把要打開的文件內(nèi)容顯示在記事本中。

        2.3 另存為功能

        當(dāng)單擊另存為選項(xiàng)時(shí),通過JFileChooser類的showSaveDialog ()方法來顯示保存文件對話框,當(dāng)設(shè)置了文件保存位置、文件名并確認(rèn)保存操作后,該方法的返回值與JFileChooser.APPROVE_OPTION相等,使用JFileChooser對象的getSelectedFile()獲得保存文件對象file,再通過FileWriter類對象與保存的文件關(guān)聯(lián)建立輸出流對象writer,通過輸出流對象writer調(diào)用write()方法將textArea.getText()中需要保存的所有文本內(nèi)容,寫到輸出流對象writer關(guān)聯(lián)的文件中,從而實(shí)現(xiàn)文件的另存為功能。

        public void saveasFile(){

        fileChooser=new JFileChooser();

        if(fileChooser.showSaveDialog(this)==JFileChooser.APPROVE_OPTION){

        file=fileChooser.getSelectedFile();

        String content=textArea.getText();

        try {

        writer=new FileWriter(file);

        writer.write(content);

        writer.close();

        this.setTitle(file.getName());

        oldStr=textArea.getText();

        } catch (IOException e) {e.printStackTrace();}

        }}

        2.4 保存功能

        保存功能類似于另存為功能,但其包含兩種情況,第一種情況是文件不存在即指新文件第一次保存時(shí),需要調(diào)用上節(jié)所實(shí)現(xiàn)的另存為功能對應(yīng)的saveasFile()方法完成文件位置選擇及文件命名保存;第二種情況是對已存在文件進(jìn)行保存操作,此時(shí)只需要把新增內(nèi)容寫入原文件中保存即可。

        保存功能代碼如下:

        public void saveFile(){

        if(file!=null){//舊文件保存時(shí),把textArea中的內(nèi)容直接寫到原文件中即可

        String text=textArea.getText();

        char content[]=text.toCharArray();endprint

        try {

        writer=new FileWriter(file);

        writer.write(text);

        writer.close();

        this.setTitle(file.getName());

        oldStr=textArea.getText();

        } catch (IOException e) { e.printStackTrace();}

        }else{

        saveasFile();}}//新文件第一次保存,會彈出保存對話框,進(jìn)行命名

        2.5 新建文件功能

        只要對文本編輯區(qū)里的內(nèi)容做了修改,選擇文件菜單下的新建功能時(shí),會提示是否保存文件的修改內(nèi)容。如果需要保存,則調(diào)上節(jié)實(shí)現(xiàn)的保存功能對應(yīng)的saveFile()方法來處理新文件保存或者原名原位置文件保存;如果放棄保存,則直接新建文件。新建文件實(shí)質(zhì)是把file對象置為null,同時(shí)把textArea文本區(qū)內(nèi)容置為null。

        新建功能代碼如下:

        public void newFile() {

        newStr = textArea.getText();

        if (?。╫ldStr.trim().equals(newStr.trim()))){//文本有修改,并保存修改

        int status = JOptionPane.showConfirmDialog(this, "是否保存文件的修改?", "確認(rèn)修改", JOptionPane.YES_NO_CANCEL_OPTION);

        if (status == JOptionPane.YES_OPTION) {

        saveFile();}}

        file = null;

        textArea.setText(null);

        this.setTitle("新建文件");}

        2.6 設(shè)置字體顏色

        本文使用Java類庫所提供的JColorChooser來創(chuàng)建一個(gè)顏色選擇器對象,并利用該對象調(diào)用showDialog來顯示顏色選擇對話框并返回選擇的Color對象,再通過JTextArea對象的setForeground(color)將記事本的文本區(qū)設(shè)置成所選顏色。實(shí)現(xiàn)現(xiàn)代碼如下:

        public void setFontColor(){

        colorChoos=new JColorChooser();

        Color color= colorChoos.showDialog(this, "調(diào)色板", Color.black);

        textArea.setForeground(color);}

        2.7 字體設(shè)置功能

        代碼中的FontChooser是自定義的一個(gè)字體選擇器類,用來仿Windows記事本中的字體選擇控件,F(xiàn)ontChooser類的定義和操作與文件選擇器JFileChooser基本相同,由于篇幅關(guān)系,F(xiàn)ontChooser類的實(shí)現(xiàn)在此不再贅述。利用自定義FontChooser類設(shè)置記事本中字形,字號,字體選擇設(shè)置代碼如下:

        public void setFont(){

        FontChooser fontChooser=new FontChooser(textArea.getFont());//構(gòu)造選擇器對象

        int returnValue = fontChooser.showFontDialog(this); // 打開字體選擇器對話框

        if (returnValue == FontChooser.APPROVE_OPTION) { //按下確定按鈕

        Font font = fontChooser.getSelectFont(); // 獲取選擇的字體

        textArea.setFont(font); }} //將textArea中文字設(shè)置為選中字體

        3 結(jié)束語

        本記事本通過使用Java Swing呈現(xiàn)出友好的人機(jī)交互界面,采用字符輸入輸出流對象實(shí)現(xiàn)文件打開,保存功能,采用事件處理技術(shù)實(shí)現(xiàn)各菜單項(xiàng)相應(yīng)操作功能,另外通過JColorChooser類及自定義FontChooser類實(shí)現(xiàn)了文本字體顏色,字體設(shè)置等功能。文中所實(shí)現(xiàn)的記事本與Windows系統(tǒng)所提供的記事本功能大致相同,但擴(kuò)展并實(shí)現(xiàn)了Windows記事本沒有的字體顏色設(shè)置功能。本程序?yàn)镴ava初學(xué)者掌握事件處理,輸入輸出流,Java Swing等知識提供了一個(gè)綜合而有用的實(shí)例,便于初學(xué)者理解及掌握,并且對《Java程序設(shè)計(jì)》課程教學(xué)有一定的參考作用。

        參考文獻(xiàn):

        [1] 王振飛,孫嬡.Java語言程序設(shè)計(jì)[M].廣州: 華南理工大學(xué)出版社,2015.

        [2] 傳智博客.Java基礎(chǔ)入門[M].北京: 清華大學(xué)出版社,2014.

        [3] 歐陽桂秀.Java中幾個(gè)文件輸入流和文件輸出流的研究[J].福建電腦,2014(10):117-118.

        [4] 馬巧梅.基于Java打磚塊游戲的設(shè)計(jì)與實(shí)現(xiàn)[J].信息技術(shù),2016(7):16-19.

        [5] 孫佳美.基于Java飛機(jī)大戰(zhàn)的設(shè)計(jì)與實(shí)現(xiàn)[J].無線互聯(lián)科技,2016(1):54-55.endprint

        国产欧美日韩视频一区二区三区 | 青青视频一区| 国产成人精品无码一区二区老年人| 国产主播一区二区三区在线观看| 亚洲 另类 小说 国产精品| 漂亮人妻被中出中文字幕久久| 中文字幕在线免费| 亚洲精品国产主播一区二区| 亚洲国产成人久久精品一区| 亚洲a∨无码一区二区三区| 国产成人av一区二区三区无码| 日韩av无码午夜福利电影| 91成人国产九色在线观看| 亚洲中文字幕一区精品自拍| 厨房玩丰满人妻hd完整版视频| 蜜臀aⅴ永久无码一区二区| 日韩av免费一区二区| 国产精品人妻一区二区三区四| 自拍偷自拍亚洲精品播放| 中文字幕日本熟妇少妇| 亚洲国产色婷婷久久精品| 让少妇高潮无乱码高清在线观看 | 大伊香蕉精品视频一区| 一区视频免费观看播放| 又色又爽又黄高潮的免费视频| 久久tv中文字幕首页| 老肥熟女老女人野外免费区| 亚洲精品一区二区三区52p| 久久久久亚洲av无码专区首jn| 狠狠躁夜夜躁人人爽天天 | 日韩爱爱视频| 国产91精品自拍视频| 四虎国产精品永久在线| 亚洲 都市 校园 激情 另类| 中文字幕精品永久在线| 人妻免费一区二区三区免费| 久久久久久久久蜜桃| 亚洲日韩中文字幕在线播放| 女主播啪啪大秀免费观看| 人妻饥渴偷公乱中文字幕| 老男人久久青草AV高清|