Java圖形界面開發(fā)之簡易記事本
在學(xué)習(xí)了Java事件之后,自己寫了一個(gè)極其簡單的記事本。用到了MenuBar,Menu,MenuITem等控件,事件包括ActionListener以及KeyListener。
代碼如下:
package com.package3;
/*
* 功能:簡易記事本的開發(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("簡易記事本");
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è)置其顯示出來
//獲取路徑和文件名
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ì)象
//按照行來讀取數(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)槲募淮嬖凇K孕枰ile對(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來保存文本
(4)可以點(diǎn)擊closeItem來退出程序。
在實(shí)現(xiàn)功能3時(shí),對(duì)文本區(qū)域添加了KeyListener,利用了適配器KeyAdapter來實(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)用上邊方法來進(jìn)行判斷。isControlDown()方法用來判斷ctrl鍵是否被按下。如程序中的if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S)便實(shí)現(xiàn)了組合判斷。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JAVA Swing實(shí)現(xiàn)窗口添加課程信息過程解析
這篇文章主要介紹了JAVA Swing實(shí)現(xiàn)窗口添加課程信息過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
springboot2.0?@Slf4j?log?彩色日志配置輸出到文件
這篇文章主要介紹了springboot2.0 @Slf4j log日志配置輸出到文件(彩色日志),解決方式是使用了springboot原生自帶的一個(gè)log框架,結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2023-08-08
Java練手小項(xiàng)目實(shí)現(xiàn)一個(gè)項(xiàng)目管理系統(tǒng)
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)項(xiàng)目管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-10-10

