使用Java制作一個(gè)簡單的記事本
通過使用Java的Swing、IO來實(shí)現(xiàn)一個(gè)簡單記事本,實(shí)現(xiàn)打開指定的text文本文件,然后將text文件的內(nèi)容加載到Swing組件中,然后在Swing組件中編輯記事本內(nèi)容,然后同菜單的保存選項(xiàng)將編輯后的內(nèi)容保存到text文件中。代碼如下:
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JOptionPane;
/**
*功能:簡單記事本
*2011-12-25
*/
public class SimpleNotepad implements ActionListener{
private Frame frame;
private FileDialog fd_load;
private FileDialog fd_save;
private TextArea ta;
private String file = "";
private MenuItem save;
private RandomAccessFile raf;
private FileChannel fci;
private FileLock flock;
private CharsetEncoder encoder;
private CharsetDecoder decoder;
public static void main( String args[]) {
new SimpleNotepad().init();
}
public void init(){
frame = new Frame("My Notepad");
MenuBar mb = new MenuBar();
Menu file = new Menu("文件");
Menu help = new Menu("幫助");
MenuItem open = new MenuItem("打開");
save = new MenuItem("保存");
save.setEnabled(false);
file.add(open);
file.add(save);
mb.add(file);
mb.add(help);
frame.setMenuBar(mb);
ta = new TextArea();
frame.add(ta,"Center");
open.addActionListener(this);
save.addActionListener(this);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
frame.setSize(600,400);
frame.setLocation(300,100);
frame.setVisible( true);
fd_load = new FileDialog(frame,"打開文件",FileDialog.LOAD);
fd_save = new FileDialog(frame,"保存文件",FileDialog.SAVE);
Charset charset = Charset.forName(System.getProperty("file.encoding"));
encoder = charset.newEncoder();
decoder = charset.newDecoder();
}
public void actionPerformed(ActionEvent e){
String s = e.getActionCommand();
if(s.equals("打開")){
fd_load.setVisible(true);
String d = fd_load.getDirectory();
String f = fd_load.getFile();
if((d != null) && (f != null)){
String destfile = d + f;
if(destfile.equals(file)){
return;
}else{
this.closeFile();
file = destfile;
this.loadFile();
}
}
}else if(s.equals("保存")){
this.saveFile();
}
}
public void loadFile(){
try{
raf = new RandomAccessFile(file,"rw");
fci = raf.getChannel();
flock = fci.tryLock();
if(flock == null){
ta.setText("");
JOptionPane.showMessageDialog(null,
"文件正在使用中,無法以獨(dú)占的方式打開!",
"錯(cuò)誤提示", JOptionPane.ERROR_MESSAGE);
file = "";
raf.close();
raf = null;
}else{
int length = (int)fci.size();
ByteBuffer bb = ByteBuffer.allocate(length);
fci.read(bb);
bb.flip();
CharBuffer cb = decoder.decode(bb);
ta.setText(cb.toString());
frame.setTitle("My Notepad - " + file);
save.setEnabled(true);
}
}catch(IOException e){
e.printStackTrace();
}
}
public void saveFile(){
String content = ta.getText();
try{
CharBuffer cb = CharBuffer.wrap(content.toCharArray());
ByteBuffer bb = encoder.encode(cb);
raf.setLength(0);
fci.write(bb);
fci.force(true);
}catch(IOException e){
e.printStackTrace();
}
}
public void closeFile(){
try{
if(flock != null){
flock.release();
}
if(raf != null){
raf.close();
}
file = "";
frame.setTitle("My Notepad");
save.setEnabled(false);
}catch(IOException e){
e.printStackTrace();
}
}
}
效果圖:
以上就是本文的全部內(nèi)容了,希望大家能夠喜歡。
相關(guān)文章
老生常談spring boot 1.5.4 日志管理(必看篇)
下面小編就為大家?guī)硪黄仙U剆pring boot 1.5.4 日志管理(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06解決feignclient調(diào)用服務(wù),傳遞的中文數(shù)據(jù)成???問題
這篇文章主要介紹了解決feignclient調(diào)用服務(wù),傳遞的中文數(shù)據(jù)成???問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Springboot繼承Keycloak實(shí)現(xiàn)單點(diǎn)登錄與退出功能
這篇文章主要介紹了Springboot繼承Keycloak實(shí)現(xiàn)單點(diǎn)登陸與退出,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08Springboot實(shí)現(xiàn)郵箱驗(yàn)證代碼實(shí)例
這篇文章主要介紹了Springboot實(shí)現(xiàn)郵箱驗(yàn)證代碼實(shí)例,在一些業(yè)務(wù)需求中我們經(jīng)常需要使用郵箱進(jìn)行驗(yàn)證碼的收取,本文通過簡單的代碼實(shí)例來說明,需要的朋友可以參考下2024-01-01SpringBoot實(shí)現(xiàn)配置文件的替換
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)配置文件的替換,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

SpringBoot+MyBatisPlus+Vue 前后端分離項(xiàng)目快速搭建過程(后端)

Eclipse啟動(dòng)Tomcat超時(shí)問題的解決方法