通过使用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();
}
}
}
效果图:
以上就是本文的全部内容了,希望大家能够喜欢。
本文地址:https://www.stayed.cn/item/736
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我