在學習了Java事件之後,自己寫了一個極其簡單的記事本。用到了MenuBar,Menu,MenuITem等控制項,事件包括ActionListener以及KeyListener。
代碼如下:
package com.package3; /* * 功能:簡易記事本的開發,可以儲存檔案,開啟檔案,退出記事本 * 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; //建構函式 public MenuText() { //調用初始化函數 init(); } //對組件進行初始化操作 public void init() { f=new JFrame("簡易記事本"); 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); //設定JFrame屬性 f.setBounds(200, 300, 500, 400); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); //呼叫事件函數 event(); } //事件函數,對事件進行處理 public void event() { //開啟選項 openItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //調用開啟檔案的方法 openFile(); } }); //儲存選項 saveItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //調用儲存檔案的方法。 saveFile(); } }); //添加一個文本地區的事件,即按下Ctrl+S可以儲存 //因為鍵盤監聽事件有多種方法,而我們只需要其中的一種,所以可以使用適配器KeyAdapter, //從而只需要實現一種方法即可 jta.addKeyListener(new KeyAdapter() { //鍵盤按下方法 public void keyPressed(KeyEvent e){ if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S) { //調用儲存檔案的方法。 saveFile(); //JOptionPane.showMessageDialog(null, "對啦"); } } }); //關閉選項 closeItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //退出系統 System.exit(0); } }); } //開啟文本的方法 public void openFile() { openDia.setVisible(true); //設定其顯示出來 //擷取路徑和檔案名稱 String dirPath=openDia.getDirectory(); String fileName=openDia.getFile(); //防止點擊取消報錯 if(dirPath==null || fileName==null) return ; jta.setText(""); //將文本地區清空 file=new File(dirPath,fileName); //建立檔案對象 //按照行來讀取資料,顯示在文本地區 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(); //防止點擊取消報錯 if(dirPath==null || fileName==null) return ; //因為檔案不存在。所以需要建立file對象 file = new File(dirPath,fileName); } //將資料寫入檔案 try { BufferedWriter bw=new BufferedWriter(new FileWriter(file)); String info=jta.getText(); //得到文本地區的資訊 bw.write(info); //寫入操作 bw.flush(); bw.close(); } catch (IOException e1) { throw new RuntimeException(); } } public static void main(String[] args) { //建立對象 new MenuText(); } }
運行結果如圖所示:
本程式實現的功能有:
(1)可以開啟某個檔案,並且可以編輯。
(2)可以儲存編輯後的檔案。
(3)可以使用Ctrl+S來儲存文本
(4)可以點擊closeItem來退出程式。
在實現功能3時,對文本地區添加了KeyListener,利用了適配器KeyAdapter來實現監聽。但是現在需要的時一種組合監聽,即ctrl和S都被按下時才會觸發儲存操作。
關於組合監聽,Java API中有提供相應方法。
找到KeyEvent類的直接父類即InputEvent類。如圖所示:
查看InputEvent類中的方法,如下所示:
做為InputEvent類的子類KeyEvent類的對象e可以直接調用上邊方法來進行判斷。isControlDown()方法用來判斷ctrl鍵是否被按下。如程式中的if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S)便實現了組合判斷。
以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。