使用Java制作一个简单的记事本
更新时间:2015年02月28日 15:27:09 投稿:hebedich
本文给大家带来的是使用Java制作一个简单的记事本的代码,有相同需要的朋友可以参考下
通过使用Java的Swing、IO来实现一个简单记事本,实现打开指定的text文本文件,然后将text文件的内容加载到Swing组件中,然后在Swing组件中编辑记事本内容,然后同菜单的保存选项将编辑后的内容保存到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,
"文件正在使用中,无法以独占的方式打开!",
"错误提示", 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();
}
}
}
效果图:
以上就是本文的全部内容了,希望大家能够喜欢。
相关文章
老生常谈spring boot 1.5.4 日志管理(必看篇)
下面小编就为大家带来一篇老生常谈spring boot 1.5.4 日志管理(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-06-06解决feignclient调用服务,传递的中文数据成???问题
这篇文章主要介绍了解决feignclient调用服务,传递的中文数据成???问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01Springboot继承Keycloak实现单点登录与退出功能
这篇文章主要介绍了Springboot继承Keycloak实现单点登陆与退出,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-08-08SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建过程(后端)
这篇文章主要介绍了SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建过程(后端),快速生成后端代码、封装结果集、增删改查、模糊查找,毕设基础框架,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-05-05
最新评论