Java圖形界面開發(fā)之簡(jiǎn)易記事本
在學(xué)習(xí)了Java事件之后,自己寫了一個(gè)極其簡(jiǎn)單的記事本。用到了MenuBar,Menu,MenuITem等控件,事件包括ActionListener以及KeyListener。
代碼如下:
package com.package3; /* * 功能:簡(jiǎn)易記事本的開發(fā),可以保存文件,打開文件,退出記事本 * author:ywq */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class MenuText { //定義組件: JFrame f; MenuBar mb; //菜單欄 Menu mu; //菜單 JTextArea jta; MenuItem openItem, saveItem, closeItem; //子菜單 FileDialog openDia,saveDia; //彈出的保存和打開框 File file; //構(gòu)造函數(shù) public MenuText() { //調(diào)用初始化函數(shù) init(); } //對(duì)組件進(jìn)行初始化操作 public void init() { f=new JFrame("簡(jiǎn)易記事本"); mb=new MenuBar(); mu=new Menu("文件"); openItem=new MenuItem("打開"); saveItem=new MenuItem("保存"); closeItem=new MenuItem("退出"); jta=new JTextArea(); f.add(jta); //添加 mu.add(openItem); mu.add(saveItem); mu.add(closeItem); mb.add(mu); f.setMenuBar(mb); openDia=new FileDialog(f, "打開", FileDialog.LOAD); saveDia=new FileDialog(f, "保存", FileDialog.SAVE); //設(shè)置JFrame屬性 f.setBounds(200, 300, 500, 400); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); //調(diào)用事件函數(shù) event(); } //事件函數(shù),對(duì)事件進(jìn)行處理 public void event() { //打開選項(xiàng) openItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //調(diào)用打開文件的方法 openFile(); } }); //保存選項(xiàng) saveItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //調(diào)用保存文件的方法。 saveFile(); } }); //添加一個(gè)文本區(qū)域的事件,即按下Ctrl+S可以保存 //因?yàn)殒I盤監(jiān)聽事件有多種方法,而我們只需要其中的一種,所以可以使用適配器KeyAdapter, //從而只需要實(shí)現(xiàn)一種方法即可 jta.addKeyListener(new KeyAdapter() { //鍵盤按下方法 public void keyPressed(KeyEvent e){ if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S) { //調(diào)用保存文件的方法。 saveFile(); //JOptionPane.showMessageDialog(null, "對(duì)啦"); } } }); //關(guān)閉選項(xiàng) closeItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //退出系統(tǒng) System.exit(0); } }); } //打開文本的方法 public void openFile() { openDia.setVisible(true); //設(shè)置其顯示出來(lái) //獲取路徑和文件名 String dirPath=openDia.getDirectory(); String fileName=openDia.getFile(); //防止點(diǎn)擊取消報(bào)錯(cuò) if(dirPath==null || fileName==null) return ; jta.setText(""); //將文本區(qū)域清空 file=new File(dirPath,fileName); //建立文件對(duì)象 //按照行來(lái)讀取數(shù)據(jù),顯示在文本區(qū)域 try { BufferedReader br = new BufferedReader(new FileReader(file)); String line = null; while((line=br.readLine())!=null) { jta.append(line+"\r\n"); } br.close(); } catch (IOException ex) { throw new RuntimeException("讀取失敗"); } } //保存文本的方法。 public void saveFile() { //先判斷文件是否存在 if(file==null) { saveDia.setVisible(true); String dirPath = saveDia.getDirectory(); String fileName = saveDia.getFile(); //防止點(diǎn)擊取消報(bào)錯(cuò) if(dirPath==null || fileName==null) return ; //因?yàn)槲募淮嬖?。所以需要建立file對(duì)象 file = new File(dirPath,fileName); } //將數(shù)據(jù)寫入文件 try { BufferedWriter bw=new BufferedWriter(new FileWriter(file)); String info=jta.getText(); //得到文本區(qū)域的信息 bw.write(info); //寫入操作 bw.flush(); bw.close(); } catch (IOException e1) { throw new RuntimeException(); } } public static void main(String[] args) { //創(chuàng)建對(duì)象 new MenuText(); } }
運(yùn)行結(jié)果如圖所示:
本程序?qū)崿F(xiàn)的功能有:
(1)可以打開某個(gè)文件,并且可以編輯。
(2)可以保存編輯后的文件。
(3)可以使用Ctrl+S來(lái)保存文本
(4)可以點(diǎn)擊closeItem來(lái)退出程序。
在實(shí)現(xiàn)功能3時(shí),對(duì)文本區(qū)域添加了KeyListener,利用了適配器KeyAdapter來(lái)實(shí)現(xiàn)監(jiān)聽。但是現(xiàn)在需要的時(shí)一種組合監(jiān)聽,即ctrl和S都被按下時(shí)才會(huì)觸發(fā)保存操作。
關(guān)于組合監(jiān)聽,Java API中有提供相應(yīng)方法。
找到KeyEvent類的直接父類即InputEvent類。如圖所示:
查看InputEvent類中的方法,如下所示:
做為InputEvent類的子類KeyEvent類的對(duì)象e可以直接調(diào)用上邊方法來(lái)進(jìn)行判斷。isControlDown()方法用來(lái)判斷ctrl鍵是否被按下。如程序中的if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S)便實(shí)現(xiàn)了組合判斷。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java加密MD5實(shí)現(xiàn)及密碼驗(yàn)證代碼實(shí)例
這篇文章主要介紹了java加密MD5實(shí)現(xiàn)及密碼驗(yàn)證代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12解決idea spring boot 修改html等不重啟即時(shí)生效的問(wèn)題
這篇文章主要介紹了解決idea spring boot 修改html等不重啟即時(shí)生效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02Java?NIO實(shí)現(xiàn)聊天系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java?NIO實(shí)現(xiàn)聊天系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11mybatis createcriteria和or的區(qū)別說(shuō)明
這篇文章主要介紹了mybatis createcriteria和or的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07ImportBeanDefinitionRegistrar手動(dòng)控制BeanDefinition創(chuàng)建注冊(cè)詳解
這篇文章主要為大家介紹了ImportBeanDefinitionRegistrar手動(dòng)控制BeanDefinition創(chuàng)建注冊(cè)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Java中Socket設(shè)置連接超時(shí)的代碼分享
在我們?nèi)粘_B接中,如果超時(shí)時(shí)長(zhǎng)過(guò)長(zhǎng)的話,在開發(fā)時(shí)會(huì)影響測(cè)試,下面這篇文章主要給大家分享了關(guān)于Java中Socket設(shè)置連接超時(shí)的代碼,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-06-06