import java.awt.*;
import java.awt.event.*;
import java.io.*;
//图形界面项。模拟记事本
//只是模拟了打开文件和保存文件
class Note{
private Frame frm;
private MenuBar bar;
private Menu menu1,menu2;
private MenuItem open,save;
private TextArea text;
private FileDialog fd;
private File file;
private static final int width=Toolkit.getDefaultToolkit().getScreenSize().width;
private static final int height=Toolkit.getDefaultToolkit().getScreenSize().height;
public void NoteDemo(){
frm=new Frame("模拟记事本");
frm.setSize(700, 650);//设置窗口大小
frm.setLocation((width-700)/2, (height-650)/2);//使窗口在屏幕在中间显示
frm.setLayout(null);//窗口样式为null
frm.setVisible(true);//使窗口显示
//菜单栏初始化
bar=new MenuBar();
frm.setMenuBar(bar);//窗口添加菜单栏
//初始化菜单
menu1=new Menu("文件");
bar.add(menu1);
menu2=new Menu("编辑");
bar.add(menu2);
//初始化菜单项
open =new MenuItem("打开");
menu1.add(open);
save=new MenuItem("保存");
menu1.add(save);
//多行文本初始化
text=new TextArea();
text.setSize(680, 588);
text.setLocation(10, 53);
text.setBackground(Color.green);
frm.add(text);
event();
}
//定义方法添加事件
private void event(){
open.addActionListener(new ActionListener(){//活动监听
public void actionPerformed(ActionEvent e){
//创建文件对话框的对象
fd=new FileDialog(frm,"打开文件");
fd.setVisible(true);
//获取用户选择的路径
String dir=fd.getDirectory();
//获取用户选择的文件
String fileName=fd.getFile();
//如果用户点击的是取消,路径和文件 获取都是null
if(dir==null||fileName==null){
//结束方法
return;
}
//如果用户点击了文件,点击打开,IO读取文件
//将路径和文件名封装成File对象
file=new File(dir,fileName);
openFile(file);
}
});
//多行文本添加键盘事件
text.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
System.out.println("键盘按下");
}
});
frm.addWindowListener(new WindowAdapter(){//添加事件监听,关闭窗口
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//保存菜单项添加活动事件
save.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//判断成员变量file是不是空,如果是空,开启对话框
if(file==null){
//创建对话框,开启对话框
fd=new FileDialog(frm,"保存文件",FileDialog.SAVE);
fd.setVisible(true);
}
//获取用户选择的路径
String dir=fd.getDirectory();
String fileName=fd.getFile();
//对路径和文件名非空判断
if(dir==null||fileName==null){
return;
}
//路径和文件名封装File对象
file =new File(dir,fileName);
//调用写入文件方法
saveFile(file);
}
});
}
//定义方法,保存方法,
//打印流
private void saveFile(File file){
//使用打印流,将多行文本中的数据打印到文件中
PrintWriter pw=null;
try{
pw=new PrintWriter(new FileWriter(file),true);
//获取多行文本内容
String s=text.getText();
pw.println(s);
}catch(IOException e){
throw new RuntimeException("保存失败");
}finally{
pw.close();
}
}
//定义方法,打开文件,读取文件
private void openFile(File file){
//字符缓冲区BufferReader读取
//读取一行,就在多行文本中,添加一行
BufferedReader br=null;
try{
br=new BufferedReader(new FileReader(file));
String len=null;
//清空多行文本
text.setText("");
while((len=br.readLine())!=null){
text.append(len+"\r\n");//读到\r\n换行
}
}catch(IOException e){
throw new RuntimeException("文件打开失败");
}finally{
try{
if(br!=null)
br.close();
}catch(IOException e){
throw new RuntimeException("关闭资源失败");
}
}
}
}
public class Notepad {
public static void main(String[] args) {
new Note().NoteDemo();
}
}
|
|