Java中使用AWT编写自己的第四个图形界面--简单的记事本

  弄了个简单的记事本,能进行简单的打开文件,编辑文件,保存文件,但是怎么都无法解决中文乱码问题,求大家指教……

package com.xywei.awt;

import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

/**
*
* @author Welins 写一个自己的简单记事本、
*
*/
public class MyNotepad {

private Frame fr = new Frame();
private MenuBar mbar = new MenuBar();
private Menu mu = new Menu();
private MenuItem clsItem = new MenuItem();
private MenuItem saveItem = new MenuItem();
private MenuItem opnItem = new MenuItem();
private TextArea txAe = new TextArea();
// 要打开的文件,涉及IO
private File file;
// 保存或者打开的对话框
// private FileDialog openDia,saveDia;
private FileDialog opnDial, saveDial;

public void myNotepad() {
fr.setTitle("我的记事本");
fr.setBounds(400, 100, 600, 400);
fr.setVisible(true);
fr.setMenuBar(mbar);

mu.setLabel("选择");

mbar.add(mu);
opnItem.setLabel("打开");
mu.add(opnItem);
saveItem.setLabel("保存");
mu.add(saveItem);
clsItem.setLabel("关闭");
mu.add(clsItem);
// 把文本加入到框架窗口中
fr.add(txAe);

opnDial = new FileDialog(fr, "打开", FileDialog.LOAD);
saveDial = new FileDialog(fr, "保存", FileDialog.SAVE);

Event();
}

public void Event() {
fr.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println("准备关闭窗口====");
System.out.println("窗口关闭了,程序退出来了");
System.exit(0);
}
});

clsItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});

// 读文件操作
opnItem.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// 调用系统的函数,实现打开文件
// TODO Auto-generated method stub
opnDial.setVisible(true);
// 获得目录和文件
String dir = opnDial.getDirectory();
String fileName = opnDial.getFile();
System.out.println("你选择文件的目录是:" + dir + "文件为:" + fileName);
// 选择好了之后就在文本域中显示出来,先做清空处理
txAe.setText(null);
// 通过路径和文件名获得相应的文件
file = new File(dir, fileName);
// 下面的涉及到IO流操作,把文件打开,是按字节打开好还是字符还是一行一行好?
// 比较容易的是一行一行地读
/**
* // 把文件变为输入流 InputStreamReader inStrRead = new
* InputStreamReader( new FileInputStream(file), encoding); //
* 接下来把输入流变为字节流 BufferedReader bufRead = new
* BufferedReader(inStrRead); // 字符串 String lineTxt = null;
*
* while ((lineTxt = bufRead.readLine()) != null) {
* System.out.println(lineTxt); } // 读完之后还得关闭读入流
* bufRead.close(); inStrRead.close();
*/

String encoding = "UTF-8";
InputStreamReader bufIn;
try {
bufIn = new InputStreamReader(new FileInputStream(file),
encoding);
BufferedReader bufRead = new BufferedReader(bufIn);
// 一行一行读肯定还是得有个字符串、
String readF = null;

try {
while ((readF = bufRead.readLine()) != null) {

System.out.println(readF);
txAe.append(readF);
}
// 读完还得关闭流
bufRead.close();
bufIn.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
System.out.println("读取失败1======");

}
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
System.out.println("读取失败2======");
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
System.out.println("读取失败3======");

}

// TODO Auto-generated catch block

}
});

// 写文件操作
saveItem.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (file == null) {
saveDial.setVisible(true);
String dir = saveDial.getDirectory();
String fileName = saveDial.getFile();
file = new File(dir, fileName);

}
// 下面进行写的操作设计输出流操作
try {
OutputStreamWriter bufw = new OutputStreamWriter(
new FileOutputStream(file));
String writeStr = txAe.getText();
try {
bufw.write(writeStr);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
bufw.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}
});

}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyNotepad notePad = new MyNotepad();
notePad.myNotepad();
}

}

时间: 2024-12-25 15:55:05

Java中使用AWT编写自己的第四个图形界面--简单的记事本的相关文章

Java中使用AWT编写自己的第三个图形界面,有菜单栏

该程序实现了的功能是出现菜单栏,点击菜单的退出选项就能退出窗体! package com.xywei.awt; import java.awt.Button;import java.awt.FlowLayout;import java.awt.Frame;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt

Java中使用AWT编写自己的第一个图形界面

awt和swing是有区别的,swing是基于重量级awt上的轻量级组件,awt开发图形界面在跨平台方面没有swing好,所以一般使用swind组件比较好! package com.xywei.awt; import java.awt.Button;import java.awt.FlowLayout;import java.awt.Frame;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent; publi

Java中使用AWT编写自己的第二个图形界面

这个例子插入了文本框,进入按钮,单件按钮,双击按钮等操作事件! package com.xywei.awt; import java.awt.Button;import java.awt.FlowLayout;import java.awt.Frame;import java.awt.TextArea;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;i

Java中调用Delphi编写的DLL

有些时候,要写一些程序,在 JAVA 里面好难实现, 但如果使用其它编程语言却又比较容易时,我们不妨通过 JNI 来让不同语言的程序共同完成. JNI 的教程, 网上 C 的比较多,Java 也提供了 javah.exe 为 C 语言的 JNI 程序生成头文件, 如果你是一个 Delphi 编程员, 能否让 JAVA 与 Delphi 程序交互呢? 答案是肯定的,今天我们就来看一下一个简单的例子. Helloworld. 主要是来认识一下, JAVA 怎样调用 Delphi 程序的方法. 好的,

【转】转帖并注释:Java中的事件处理机制--事件监听器的四种实现方式

原文地址:http://blog.sina.com.cn/s/blog_4b650d650100nqws.html Java中四种事件监听器的实现方式分别为: 自身类做为事件监听器 外部类作为事件监听器 匿名内部类作为事件监听器 内部类作为事件监听器. 下面分别描述: //--------------------------------------------------------------------- 1. 自身类作为事件监听器: 1 import javax.swing.*; 2 im

java中的链表编写

通过while循环取出节点内容 class Node{//定义一个节点类,用于保存数据和取得下一个节点 private String data;//节点中数据 private Node next;//下一个节点 public Node(String data){ this.data = data; } public void setNext(Node next){ this.next = next; } public Node getNext(){ return next; } public S

Java中静态关键字的使用方法介绍四

1         静态代码块 下面介绍一种不是很常见的静态修饰符的使用方法.当我们需要一个类,这个类的构造函数是私有的,那么这个类之外其他程序就不能够创建这个类的对象.那么如何初始化这个类呢? 为了解决这个问题,我们可以使用前文中的静态成员变量或者静态方法来初始化类.在类的加载过程中,静态成员变量和静态方法同时也就加载完成了.除了上面的两种方法还有一种更加简单的方法,就是在类中使用静态代码块.静态代码块不是一个方法,它的写法很简单,如下: public class Car {         

java中几种Map在什么情况下使用,并简单介绍原因及原理

一.Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复.所以通过指定的key就可以取出对应的value.Map接口定义了如下常用的方法:1.void clear():删除Map中所以键值对.2.boolean containsKey(Object key):查询Map中是否包含指定key,如果包含则返回true.3.boolean containsValue(Object value):查询Map中是否包含指定value

Java---实现运行任意目录下class中加了@MyTest的空参方法(实现图形界面)

说明: 因为上个代码,总是要输入完整的绝对路径,比较麻烦,于是,就写了这个小程序,直接进入文件对话框选择需要运行的class文件. 只需要提前输入完整的类名. 注意:加的MyTest必须打个包,加上: import cn.hncu.myJuniitApp.vo.MyTest; 不然不是同一个注解呢. 测试的类: package cn.hncu.myJuniitApp; import cn.hncu.myJuniitApp.vo.MyTest; public class MyJunitTest {