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

        ?

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

        2017-11-17 09:08:47張會(huì)
        電腦知識(shí)與技術(shù) 2017年30期
        關(guān)鍵詞:記事本

        張會(huì)

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

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

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

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

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

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

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

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

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

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

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

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

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

        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對(duì)象用來(lái)顯示或編輯記事本文件中的內(nèi)容。

        圖1 記事本界面1

        圖2 記事本界面2

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

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

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

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

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

        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(); //打開(kāi)文件

        }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 打開(kāi)文件

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

        打開(kāi)文件代碼如下:

        public void openFile(){

        area.setText(null);

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

        //顯示文件選擇對(duì)話框并確定打開(kāi)所選擇文件

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

        2.3 另存為功能

        當(dāng)單擊另存為選項(xiàng)時(shí),通過(guò)JFileChooser類的showSaveDialog ()方法來(lái)顯示保存文件對(duì)話框,當(dāng)設(shè)置了文件保存位置、文件名并確認(rèn)保存操作后,該方法的返回值與JFileChooser.APPROVE_OPTION相等,使用JFileChooser對(duì)象的getSelectedFile()獲得保存文件對(duì)象file,再通過(guò)FileWriter類對(duì)象與保存的文件關(guān)聯(lián)建立輸出流對(duì)象writer,通過(guò)輸出流對(duì)象writer調(diào)用write()方法將textArea.getText()中需要保存的所有文本內(nèi)容,寫(xiě)到輸出流對(duì)象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)的另存為功能對(duì)應(yīng)的saveasFile()方法完成文件位置選擇及文件命名保存;第二種情況是對(duì)已存在文件進(jìn)行保存操作,此時(shí)只需要把新增內(nèi)容寫(xiě)入原文件中保存即可。

        保存功能代碼如下:

        public void saveFile(){

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

        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();}}//新文件第一次保存,會(huì)彈出保存對(duì)話框,進(jìn)行命名

        2.5 新建文件功能

        只要對(duì)文本編輯區(qū)里的內(nèi)容做了修改,選擇文件菜單下的新建功能時(shí),會(huì)提示是否保存文件的修改內(nèi)容。如果需要保存,則調(diào)上節(jié)實(shí)現(xiàn)的保存功能對(duì)應(yīng)的saveFile()方法來(lái)處理新文件保存或者原名原位置文件保存;如果放棄保存,則直接新建文件。新建文件實(shí)質(zhì)是把file對(duì)象置為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類庫(kù)所提供的JColorChooser來(lái)創(chuàng)建一個(gè)顏色選擇器對(duì)象,并利用該對(duì)象調(diào)用showDialog來(lái)顯示顏色選擇對(duì)話框并返回選擇的Color對(duì)象,再通過(guò)JTextArea對(duì)象的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è)字體選擇器類,用來(lái)仿Windows記事本中的字體選擇控件,F(xiàn)ontChooser類的定義和操作與文件選擇器JFileChooser基本相同,由于篇幅關(guān)系,F(xiàn)ontChooser類的實(shí)現(xiàn)在此不再贅述。利用自定義FontChooser類設(shè)置記事本中字形,字號(hào),字體選擇設(shè)置代碼如下:

        public void setFont(){

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

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

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

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

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

        3 結(jié)束語(yǔ)

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

        參考文獻(xiàn):

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

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

        [3] 歐陽(yáng)桂秀.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].無(wú)線互聯(lián)科技,2016(1):54-55.endprint

        猜你喜歡
        記事本
        有關(guān)記事本之危險(xiǎn)的提示(節(jié)選)
        做個(gè)樹(shù)懶記事本
        小狗記事本
        童話世界(2020年29期)2020-09-25 07:39:50
        動(dòng)物園
        土撥鼠的記事本
        記事本里的信息技術(shù)課
        免费超爽大片黄| 比较有韵味的熟妇无码| 国产成人一区二区三区影院动漫| 亚洲人在线观看| 精品熟妇av一区二区三区四区| 久久精品女同亚洲女同| 一本一道人人妻人人妻αv| 免费精品无码av片在线观看| 天堂AV无码AV毛片毛| 国产精品自拍盗摄自拍| 欧美三级不卡在线观看| 五月综合丁香婷婷久久| 久久精品国产亚洲av沈先生| 青春草在线视频观看| 熟妇高潮一区二区三区在线观看| 97人人超碰国产精品最新| 四虎永久在线精品免费观看地址| 精品女同一区二区三区不卡| 国内久久婷婷六月综合欲色啪| 免费操逼视频| 亚州精品无码人妻久久| 92自拍视频爽啪在线观看| 夜夜高潮夜夜爽夜夜爱爱一区 | 永久免费av无码网站yy | 久久人人爽人人爽人人片亞洲| 亚洲精品自拍视频在线观看| 中文字幕有码在线人妻| 大地资源网高清在线播放| 亚洲欧洲高潮| 日本午夜一区二区视频| 亚洲av综合国产av日韩| 午夜亚洲www湿好爽| 无码国产精品色午夜| 久久精品熟女亚洲av麻豆永永| 男人的天堂无码动漫av| 国产成人精选在线不卡| 日本视频一区二区三区三州| 欧美精品一区二区精品久久| 男女18禁啪啪无遮挡| 漂亮的小少妇诱惑内射系列| 亚洲国产丝袜久久久精品一区二区|