通过使用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(); } } }
效果图:
以上就是本文的全部内容了,希望大家能够喜欢。
本文向大家介绍Java Web使用简单的批处理操作(记事本+Tomcat),包括了Java Web使用简单的批处理操作(记事本+Tomcat)的使用技巧和注意事项,需要的朋友参考一下 之前进行Web开发的时候使用的是myeclipse,但只用过的人都知道,由于其插件太多,而且有很多插件的功能根本就接触不到。所以导致一旦工程稍微大一点就会很卡,虽然之前也对其进行优化过,但还是觉得不太好用。今天闲来
我已经尝试自己学习Java大约一个星期了,我决定尝试应用我(相当有限)的知识来制作一个简单的猜谜游戏。
本文向大家介绍Java中反射的一个简单使用,包括了Java中反射的一个简单使用的使用技巧和注意事项,需要的朋友参考一下 简介 首先介绍一些不太实用的解释:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 简单使用 反射,在java中是非常常见和好用
本文向大家介绍用jquery的方法制作一个简单的导航栏,包括了用jquery的方法制作一个简单的导航栏的使用技巧和注意事项,需要的朋友参考一下
问题内容: 如果我有一个Java项目,其中包含几种不同类型的文件(图片,声音等)和多个jar依赖项,那么将它们打包到一个可以双击的jar中的好方法是什么? 我知道jar本身很笨,因为它们不会在内部查找它们所依赖的文件(这是我在稍有沮丧(轻描淡写)后才意识到的)。-如果jar A取决于jar B中包含的类,则将jar B放入jar A中将不起作用。Jar A必须与jar B在同一目录中。 …现在,我
本文向大家介绍Java实现的简易记事本,包括了Java实现的简易记事本的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现的简易记事本。分享给大家供大家参考。具体如下: 感觉这个没有自己以前用Windows API写的好看了。。。 JDK Version : 1.7.0 效果如下图所示: 源代码如下: 希望本文所述对大家的java程序设计有所帮助。