教你用JAVA寫(xiě)文本編輯器(二)
這是編輯器第一章 JAVA寫(xiě)文本編輯器(一) ,需要的同學(xué)了解一下。
這一章我們來(lái)處理一下JMenuBar里的item的事件響應(yīng),首先從最簡(jiǎn)單的item關(guān)于開(kāi)始。
為什么說(shuō)這個(gè)簡(jiǎn)單,因?yàn)樗枰瓿傻墓δ芎苌?,只是出?lái)一個(gè)對(duì)話框或者窗口,然后顯示一個(gè)文字。
首先,我們按照?qǐng)?zhí)行軟件的順序來(lái)寫(xiě)代碼,我們點(diǎn)擊menu,會(huì)彈出里面的子項(xiàng)item。然后當(dāng)我們點(diǎn)擊item的時(shí)候,會(huì)彈出新的窗口。注意:彈出item是menu自己做好的,但是當(dāng)我們點(diǎn)擊item是沒(méi)有響應(yīng)的,因?yàn)檫@里需要我們給他設(shè)置監(jiān)聽(tīng)器來(lái)執(zhí)行事件才行:
主窗口implements 接口ActionListener
public class test5 extends JFrame implements ActionListener{}
要Override函數(shù)actionPerformed
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
其實(shí)我們這里也可以用ItemListener用于捕獲帶有item的組件產(chǎn)生的事件,而ActionListener是所有監(jiān)聽(tīng)器的父類(lèi),可以監(jiān)聽(tīng)到所有的事件,由于擔(dān)心還會(huì)有其他的事件需要監(jiān)聽(tīng),所以就直接用 ActionListener 了,這樣用也是可以的。
接下來(lái)我們需要對(duì)item們添加監(jiān)聽(tīng)器:
/**
* 對(duì)所有btn跟item統(tǒng)一設(shè)置監(jiān)聽(tīng)器
*/
public void initListener() {
item_new.addActionListener(this);
item_open.addActionListener(this);
item_save.addActionListener(this);
item_exit.addActionListener(this);
item_undo.addActionListener(this);
item_cut.addActionListener(this);
item_copy.addActionListener(this);
item_stick.addActionListener(this);
item_delete.addActionListener(this);
item_word_format.addActionListener(this);
item_about.addActionListener(this);
}
主窗口的構(gòu)造函數(shù):
public test5() {
initMenuBar();
initEditArea();
initListener();
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);
}
我們對(duì)控件添加監(jiān)聽(tīng)器之后,是可以成功捕獲事件的(如點(diǎn)擊、雙擊、鼠標(biāo)左鍵下壓、抬起、拖動(dòng)等等),但是對(duì)于事件的處理方法,要寫(xiě)在哪里呢?我們需要寫(xiě)在接口的抽象方法里。
順便提一下:接口是跟類(lèi)很像的結(jié)構(gòu),只有變量和抽象方法??梢哉f(shuō)跟抽象類(lèi)很像,兩者都不能被實(shí)例化(new)。兩者都能被繼承(extends、implements),但是效果不同,抽象類(lèi)的最終目標(biāo)是為實(shí)例化而服務(wù)的,而接口是用于將對(duì)象的共同行為抽出來(lái)使用的。
下面我們給item_about添加處理事件:
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == item_about) {
new about_Window();
}
}
OK,我們添加好了監(jiān)聽(tīng)器和事件,事件要求彈出一個(gè)窗口(窗口有標(biāo)題,有提示語(yǔ),有按鈕),所以我們要做一個(gè)窗口類(lèi),然后將他new出來(lái)就可以了。
我們?cè)诎飫?chuàng)建一個(gè)類(lèi),下面我直接貼代碼了,因?yàn)檫@里比較簡(jiǎn)單:
public class about_Window extends JFrame{
private JButton btn_ok;
private JLabel about_label;
private JPanel panel ;
private BoxLayout boxlayout;
/**
* 窗口的構(gòu)造函數(shù)
*/
public about_Window() {
panel = new JPanel();
boxlayout = new BoxLayout(panel,BoxLayout.Y_AXIS);
panel.setLayout(boxlayout);
btn_ok = new JButton("OK");
btn_ok.setAlignmentX(CENTER_ALIGNMENT);
about_label = new JLabel("不懂用記事本?找我啊 ! ");
about_label.setAlignmentX(CENTER_ALIGNMENT);
panel.add(about_label);
panel.add(btn_ok);
this.add(panel);
this.setSize(300,200);
this.setTitle("關(guān)于");
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
btn_ok.addActionListener(e->{
this.dispose();
});
}
}
可以看到,我們直接在窗口的構(gòu)造函數(shù)里寫(xiě)好,然后再主窗口的事件監(jiān)聽(tīng)里實(shí)例化這個(gè)窗口,這樣就可以出來(lái)點(diǎn)擊打開(kāi)窗口的效果了。
總結(jié)一下這章:一、從用戶的角度去分析軟件的步驟,點(diǎn)擊item然后彈出窗口,然后根據(jù)這個(gè)思路去寫(xiě)代碼。二、通過(guò)繼承接口,添加監(jiān)聽(tīng)器,重寫(xiě)監(jiān)聽(tīng)方法,來(lái)處理事件。三、重新寫(xiě)一個(gè)窗口,等待主窗口的實(shí)例化操作。
總結(jié)
到此這篇關(guān)于用JAVA寫(xiě)文本編輯器的文章就介紹到這了,更多相關(guān)JAVA寫(xiě)文本編輯器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot返回前端Long類(lèi)型字段丟失精度問(wèn)題及解決方案
Java服務(wù)端返回Long整型數(shù)據(jù)給前端,JS會(huì)自動(dòng)轉(zhuǎn)換為Number類(lèi)型,本文主要介紹了SpringBoot返回前端Long類(lèi)型字段丟失精度問(wèn)題及解決方案,感興趣的可以了解一下2024-03-03
Java 按行讀取文件按行寫(xiě)入文件并以空格分割字符串的方法
今天小編就為大家分享一篇Java 按行讀取文件按行寫(xiě)入文件并以空格分割字符串的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
解決spring懶加載以及@PostConstruct結(jié)合的坑
這篇文章主要介紹了解決spring懶加載以及@PostConstruct結(jié)合的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Springboot自動(dòng)裝配之注入DispatcherServlet的實(shí)現(xiàn)方法
這篇文章主要介紹了Springboot自動(dòng)裝配之注入DispatcherServlet,Springboot向外界提供web服務(wù),底層依賴(lài)了springframework中的web模塊來(lái)實(shí)現(xiàn),那么springboot在什么時(shí)機(jī)向容器注入DispatcherServlet這個(gè)核心類(lèi)的呢?帶著這個(gè)問(wèn)題一起通過(guò)本文學(xué)習(xí)吧2022-05-05
Eclipse自定義啟動(dòng)畫(huà)面和圖標(biāo)的方法介紹
這篇文章主要介紹了Eclipse自定義啟動(dòng)畫(huà)面和圖標(biāo)的方法介紹,以及一些eclipse的快捷鍵,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
SpringBoot實(shí)現(xiàn)登錄攔截器的方法詳解
其實(shí)spring?boot攔截器的配置方式和springMVC差不多,只有一些小的改變需要注意下就ok了。本文主要給大家介紹了關(guān)于如何在Springboot實(shí)現(xiàn)登陸攔截器功能,需要的朋友可以參考下2022-07-07
springboot實(shí)現(xiàn)的https單向認(rèn)證和雙向認(rèn)證(java生成證書(shū))
springboot https單向認(rèn)證和雙向認(rèn)證,本文主要介紹了springboot實(shí)現(xiàn)的https單向認(rèn)證和雙向認(rèn)證,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
Intellij IDEA 2017.3使用Lombok及常用注解介紹
這篇文章主要介紹了Intellij IDEA 2017.3使用Lombok及常用注解介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

