教你用JAVA寫(xiě)文本編輯器(一)
前言
這里用swing ,awt寫(xiě)的。
我們大概要做成一個(gè)電腦的記事本那樣的一個(gè)編輯器??梢哉{(diào)整字體,字號(hào),顏色。能夠打開(kāi)、保存文件,新建窗口,點(diǎn)擊退出,還有一個(gè)關(guān)于介紹的窗口。整體看起來(lái)功能不是很多,只要一部分一部分的去完成就很好辦了。
思路分析:
一、首先我們的目標(biāo)模型就是電腦的記事本,打開(kāi)編輯器可以看到結(jié)構(gòu):
1、標(biāo)題顯示在窗口的title。
2、下面一行是一個(gè)工具欄,里面有文件、編輯、格式、查看、幫助。這里我們就選文件、格式、幫助來(lái)做,大致的情況都差不多。
3、再下面就是一個(gè)屏占比超高的 TextArea了,他還有個(gè)特點(diǎn)是有滾動(dòng)條。
二、文件菜單欄:這里有新建窗口,打開(kāi)文件,保存文件,還有一個(gè)退出按鈕。其中的難點(diǎn)主要在打開(kāi)和保存文件上,為什么呢。因?yàn)槲覀凕c(diǎn)開(kāi)打開(kāi)和保存兩個(gè)按鈕,都會(huì)跳出一個(gè)文件選擇的Dialog。這東西是不是要自己畫(huà),如果要自己畫(huà),那就相當(dāng)麻煩了,要對(duì)磁盤(pán)進(jìn)行遍歷,然后貼到窗口中什么的。所幸我們有封裝好的工具JFileChooser。
三、格式菜單:彈出一個(gè)窗口,有文字的各種形式的屬性選擇,中間一個(gè)展示用的文本區(qū)域,下面兩個(gè)按鈕,確定即保存格式,修改主窗口的屬性。取消則關(guān)閉窗口,不改變屬性。
四、幫助菜單:這個(gè)是最簡(jiǎn)單的,因?yàn)橹挥幸粋€(gè)彈窗,用于顯示文本,所以我們打算從這里開(kāi)始做。
OK,對(duì)每個(gè)部分分析了一下感覺(jué)清晰了很多。接下來(lái)我們來(lái)第一步,把主窗口畫(huà)出來(lái)。
具體實(shí)現(xiàn)
畫(huà)主窗口,并把菜單欄按照各自的關(guān)系建好:這里用到JMenuBar,JMenu、JMenuItem。顧名思義一個(gè)是菜單欄,一個(gè)是菜單,一個(gè)事菜單項(xiàng)。下面看代碼:
public class test5 extends JFrame{ private JMenuBar menuBar; //菜單欄 private JMenu menu_File,menu_Edit,menu_Help,menu_Format; //菜單欄內(nèi)的菜單 private JMenuItem item_new,item_open,item_save,item_exit; //對(duì)于file菜單的子項(xiàng) private JMenuItem item_undo,item_cut,item_copy,item_stick,item_delete; //對(duì)于edit菜單的子項(xiàng) private JMenuItem item_about; //對(duì)于help菜單的子項(xiàng) private JMenuItem item_word_format; public test5() { initMenuBar(); this.setJMenuBar(menuBar); this.setSize(800,600); this.setTitle("自定義文本編輯器"); this.setVisible(true); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } /** * 對(duì)menubar進(jìn)行初始化,這里有一些小的快捷方式的設(shè)置 * 大家可以考慮對(duì)所有的組件都設(shè)置一下 * 兩種形式: * menu_File.setMnemonic('f'); 對(duì)menu * item_word_format.setAccelerator(KeyStroke.getKeyStroke('F',java.awt.Event.CTRL_MASK,false)); 對(duì)item */ public void initMenuBar() { menuBar = new JMenuBar(); menu_File = new JMenu("文件(F)"); menu_File.setMnemonic('f');//f+alt打開(kāi) item_new = new JMenuItem("新建"); item_open = new JMenuItem("打開(kāi)"); item_save = new JMenuItem("保存"); item_exit = new JMenuItem("退出"); menu_File.add(item_new); menu_File.add(item_open); menu_File.add(item_save); menu_File.add(item_exit); //File 菜單 menu_Edit = new JMenu("編輯(E)"); menu_Edit.setMnemonic('e'); item_undo = new JMenuItem("撤銷"); item_cut = new JMenuItem("剪切"); item_copy = new JMenuItem("復(fù)制"); item_stick = new JMenuItem("粘貼"); item_delete = new JMenuItem("刪除"); menu_Edit.add(item_undo); menu_Edit.add(item_cut); menu_Edit.add(item_copy); menu_Edit.add(item_stick); menu_Edit.add(item_delete); //Edit 菜單 menu_Help = new JMenu("幫助(H)"); menu_Help.setMnemonic('h'); item_about = new JMenuItem("關(guān)于"); menu_Help.add(item_about); //Help 菜單 menu_Format = new JMenu("格式(O)"); menu_Format.setMnemonic('o'); item_word_format = new JMenuItem("字體(F)"); item_word_format.setAccelerator(KeyStroke.getKeyStroke('F',java.awt.Event.CTRL_MASK,false));//給item添加快捷鍵 menu_Format.add(item_word_format); menuBar.add(menu_File); menuBar.add(menu_Edit); menuBar.add(menu_Format); menuBar.add(menu_Help); } public static void main(String[] args) { test5 t5 = new test5(); } }
接下來(lái)就是菜單欄下面的文本編輯區(qū)域了,這里只需要用一個(gè)JTextArea就可以了,別忘了還有滾動(dòng)條(JScrollPane):
public class test5 extends JFrame{ ...
...
private static JTextArea edit_text_area; //private JTextArea edit_text_area; //編輯區(qū)域 private JScrollPane scroll_bar; //可滾動(dòng)的pane 里面添加edit_text_area就可以變?yōu)橐粋€(gè)可以滾動(dòng)的文本框,JScrollPane是一個(gè)pane,同時(shí)可以設(shè)置方向 public test5() { initMenuBar(); initEditArea(); this.setJMenuBar(menuBar); this.setSize(800,600); this.add(scroll_bar); this.setTitle("自定義文本編輯器"); this.setVisible(true); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } /** * 初始化編輯區(qū)域 * 用scrollpane裝textarea * 同時(shí)對(duì)pane設(shè)置方向 */ public void initEditArea() { edit_text_area = new JTextArea(); scroll_bar = new JScrollPane(edit_text_area); scroll_bar.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); } public void initMenuBar() { ... } public static void main(String[] args) { test5 t5 = new test5(); } }
為了節(jié)省篇幅,我就把重復(fù)出現(xiàn)的代碼刪除用...代替了,相信沒(méi)有影響大家的觀看效果。
OK,現(xiàn)在整個(gè)主窗口都出來(lái)了。我們回顧一下本篇都做了什么:一、整理了一下思路,按照記事本的功能和樣式,將組件才分出來(lái)分析了一下。二、對(duì)菜單欄進(jìn)行初始化。三、對(duì)文本編輯區(qū)域進(jìn)行初始化。
下面我們就要開(kāi)始做事件響應(yīng)了。
總結(jié)
到此這篇關(guān)于用JAVA寫(xiě)文本編輯器的文章就介紹到這了,更多相關(guān)JAVA寫(xiě)文本編輯器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot實(shí)現(xiàn)文件下載功能的方式分享
這篇文章主要為大家詳細(xì)介紹了SpringBoot這哪個(gè)實(shí)現(xiàn)文件下載功能的幾種方式,文中的實(shí)現(xiàn)方法簡(jiǎn)介易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03java實(shí)現(xiàn)酷狗音樂(lè)臨時(shí)緩存文件轉(zhuǎn)換為MP3文件的方法
這篇文章主要介紹了java實(shí)現(xiàn)酷狗音樂(lè)臨時(shí)緩存文件轉(zhuǎn)換為MP3文件的方法,涉及java針對(duì)文件操作的相關(guān)技巧,需要的朋友可以參考下2016-08-08Spring?Boot請(qǐng)求處理之常用參數(shù)注解使用教程
這篇文章主要給大家介紹了關(guān)于Spring?Boot請(qǐng)求處理之常用參數(shù)注解使用的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03數(shù)據(jù)結(jié)構(gòu)與算法之手撕排序算法
排序算法看似簡(jiǎn)單,其實(shí)不同的算法中蘊(yùn)涵著經(jīng)典的算法策略。通過(guò)熟練掌握排序算法,就可以掌握基本的算法設(shè)計(jì)思想,本文主要介紹了Java中的排序算法,需要的朋友歡迎閱讀2023-04-04詳解SpringCloud新一代網(wǎng)關(guān)Gateway
SpringCloud Gateway是Spring Cloud的一個(gè)全新項(xiàng)目,Spring 5.0+ Spring Boot 2.0和Project Reactor等技術(shù)開(kāi)發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單有效的統(tǒng)一的API路由管理方式2021-06-06idea中maven項(xiàng)目模塊變成灰色原因及解決方案
這篇文章主要介紹了idea中maven項(xiàng)目模塊變成灰色原因及解決方案,文中通過(guò)圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-03-03