JAVA 写一个记事本
1、主要知识点:
1、处理事件的运用、IO流的运用、GUI组件的运用
2、具体案例:
package IO流之小蓝记事本;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
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.OutputStream;
import java.io.OutputStreamWriter;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
public class NoteJFreame extends JFrame{
/*
* 声明一个文本框,允许在文本区输入多行内容,JTextArea不自带滚动条,
* 因此就需要把文本区放到一个滚动窗格中
*/
JTextArea jTextArea=new JTextArea();
//声明一个选项卡窗格容器作为中间容器
JTabbedPane jTabbledPane=new JTabbedPane();
//滚动窗格,只可以添加一个组件,可以把一个组件放到一个滚动窗格中,然后通过滚动条来观看该组件
JScrollPane jScrollPane=new JScrollPane(jTextArea);
BufferedReader br=null;
//构造函数
public NoteJFreame() {
JMenuBar jMenuBar=new JMenuBar();//建立一个菜单栏
setJMenuBar(jMenuBar);
JMenu jMenu=new JMenu(“文件”);//负责在菜单栏里面创建菜单
JMenu jMenu1=new JMenu(“编辑”);
JMenu jMenu2=new JMenu(“格式”);
jMenuBar.add(jMenu);
jMenuBar.add(jMenu1);
jMenuBar.add(jMenu2);
JMenuItem item=new JMenuItem(“打开”);//负责在菜单里面创建菜单项
JMenuItem item1=new JMenuItem(“另存为”);
jMenu.add(item);
jMenu.add(item1);
add(jScrollPane,BorderLayout.CENTER);;
setTitle(“小羊的记事本”);
//打开的功能,本质是一个输入流,将磁盘里的字节输入到内存当中
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// JFileChooser类提供了一个供用户选择文件或文件夹的对话框。
//JFileChooser():构造一个指向用户默认目录的 JFileChooser。
JFileChooser chooser=new JFileChooser();
chooser.showOpenDialog(NoteJFreame.this);
File file=chooser.getSelectedFile();//就是选择的文件
//选择文件的目的,是为了获得文件的绝对路径,然后架构一个输入流
try {
br=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
while(true) {
String str=br.readLine();
if(str==null) {
break;
}
//显示在文本框中
jTextArea.append(str);
jTextArea.append("\n");
}
} catch (FileNotFoundException e1) {
// 抓异常的目的是为了处理异常,在图新界面这个地方就是提醒弹框
System.out.println("出现异常了");//对客户来讲没意义
JOptionPane.showMessageDialog(NoteJFreame.this, "不好意思,出现异常了");
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally {
if(br!=null) {
try {
br.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
});
//另存为的功能,本质上是一个输出流,将内存上的字节输出到磁盘上并保存
item1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JFileChooser chooser=new JFileChooser();
//显示打开对话框,这里是打开用户默认的磁盘路径
chooser.showSaveDialog(NoteJFreame.this);
File file=chooser.getSelectedFile();//选择文件,目的是为了获取文件的绝对路径
//使用缓冲字符流构建输出流,缓冲流是一种包装流,还要用转换流转换一下,避免出现乱码
BufferedWriter bw=null;
try {
bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
//System.out.println(file.getAbsoluteFile());
//我们要保存的是文本框中的内容,所以我们只要从文本框中得到字节
String str=jTextArea.getText();//得到一个字符串,需要用字符串去接收一下
//然后开始用缓冲输出流往磁盘上去读
//bw.write(str);
bw.write(str.replaceAll("\n", "\r\n"));//将换行符换成winows操作系统里面默认的换行符\r\n
bw.flush();//刷新缓冲区
} catch (Exception e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(NoteJFreame.this, "出现错误,请联系管理员!");
}finally {
try {
bw.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
});
}
public static void main(String[] args) {
// TODO Auto-generated method stub
NoteJFreame noteJFreame=new NoteJFreame();
noteJFreame.setSize(500,600);
noteJFreame.setVisible(true);
noteJFreame.setLocationRelativeTo(null);
noteJFreame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
还没有评论,来说两句吧...