packagecom.swing;importjava.awt.Desktop;importjava.awt.Font;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyAdapter;importjava.awt.event.KeyEvent;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjavax.swing.JFileChooser;importjavax.swing.JFrame;importjavax.swing.JInternalFrame;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JOptionPane;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;/*** 简易笔记本
*@authormay
**/
public class Notepad extendsJInternalFrame {private static final long serialVersionUID = -6148113299360403243L;private JMenuBar menuBar = null;//菜单栏
private JTextArea textArea = null;//输入框
private JScrollPane scrollPane = null;//带滚动条的面板
private MyAction myAction = new MyAction();//事件对象
private String dir = null;//保存打开过或者保存过文件的文件夹
private String fileDir = null;//保存你打开文件的文件夹
private boolean ctrlClick = false;//用于检测当前,你是否按下了Ctrl键
private boolean sClick = false;//用于检测当前,你是否按下了s键
publicNotepad() {super("notepad");this.setSize(600, 500);//窗口的大小
menuBar = new JMenuBar();//创建菜单栏
JMenu menu1 = new JMenu("文件");//创建菜单
JMenuItem menuItem2 = new JMenuItem("打开");//创建菜单项
JMenuItem menuItem4 = new JMenuItem("保存");//创建菜单项
menuItem4.addActionListener(myAction);//绑定事件
menuItem2.addActionListener(myAction);//绑定事件
JMenuItem menuItem3 = new JMenuItem("打开文件所在目录");
menuItem3.addActionListener(myAction);
menu1.add(menuItem2);
menu1.add(menuItem3);
menu1.add(menuItem4);
JMenu menu2= new JMenu("版本信息");
menu2.addMouseListener(newMouseAdapter() {
@Overridepublic voidmouseClicked(MouseEvent e) {//定义弹窗后的按钮的文字
String[] options = {"确定"};//创建一个弹窗
JOptionPane.showOptionDialog(Notepad.this, "version:0.1-snapshoot", "关于", JOptionPane.OK_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, "确定");
}
});
menuBar.add(menu1);
menuBar.add(menu2);this.setJMenuBar(menuBar);
textArea= newJTextArea();//添加键盘检测事件
textArea.addKeyListener(newkeyOption());//this.getContentPane().add(menuBar, BorderLayout.NORTH);//设置字体
textArea.setFont(new Font("微软雅黑", Font.PLAIN, 18));
scrollPane= newJScrollPane(textArea);//当文本水平溢出时出现滚动条
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);//当文本垂直溢出时出现滚动条
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);this.getContentPane().add(scrollPane);//居中显示//this.setLocationRelativeTo(null);//最小化
this.setIconifiable(true);//可关闭
this.setClosable(true);//可改变大小
this.setResizable(true);//销毁窗口
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);this.setVisible(true);
}/*** 打开文件选择和保存对话框
*@paramflag*/
public voidopenChooseDialog(String flag) {
BufferedReader reader= null;
JFileChooser fileChooser= newJFileChooser();if(dir != null) {//定位上次打开和保存过文件的位置
fileChooser.setCurrentDirectory(newFile(dir));
}switch(flag) {case "打开"://指定它的父窗口
fileChooser.showOpenDialog(Notepad.this);//定义文件选择模式
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
File file=fileChooser.getSelectedFile();if(file != null) {try{//得到选择文件的路径
dir =file.getAbsolutePath();
fileDir=dir;
dir= dir.substring(0, dir.lastIndexOf("\\") + 1);
reader= new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"));
String str=reader.readLine();
textArea.setText("");//读取文件内容
while(str != null) {
textArea.append(str+ "\n");
str=reader.readLine();
}
}catch(Exception ex) {
ex.printStackTrace();
}finally{if(reader != null) {try{
reader.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}break;case "保存"://打开保存文件的对话框
fileChooser.showSaveDialog(Notepad.this);//得到保存文件后的文件对象
File saveFile =fileChooser.getSelectedFile();if(saveFile != null) {//得到保存文件的路径
String absolutePath =saveFile.getAbsolutePath();
fileDir=absolutePath;
FileOutputStream out= null;
BufferedWriter buffOut= null;
dir= absolutePath.substring(0, absolutePath.lastIndexOf("\\") + 1);//保存文件
try{
out= newFileOutputStream(absolutePath);
buffOut= new BufferedWriter(newOutputStreamWriter(out));
String text=textArea.getText();if(text != null) {
buffOut.write(text);
}
buffOut.flush();
}catch(Exception e) {
e.printStackTrace();
}finally{try{if(out != null) {
out.close();
}if(buffOut != null) {
buffOut.close();
}
}catch(IOException e1) {
e1.printStackTrace();
}
}
}break;case "打开文件所在目录":if(dir != null) {try{//打开文件目录
Desktop.getDesktop().open(newFile(dir));
}catch(IOException e) {
e.printStackTrace();
}
}break;
}
}/*** 事件监听类
*@authormay
**/
private class MyAction implementsActionListener {
@Overridepublic voidactionPerformed(ActionEvent e) {
JMenuItem item=(JMenuItem) e.getSource();
String flag=item.getText();switch(flag) {case "打开":
openChooseDialog(flag);break;case "保存":
openChooseDialog(flag);break;case "打开文件所在目录":
openChooseDialog(flag);break;
}
}
}/*** 键盘监听内部类
*@authormay
**/
private class keyOption extendsKeyAdapter {
@Overridepublic voidkeyPressed(KeyEvent e) {int keyCode =e.getKeyCode();if(17 ==keyCode) {
ctrlClick= true;
}else if(83 ==keyCode) {
sClick= true;
}//判断Ctrl与s键是否按下,按下就开始保存
if(ctrlClick &&sClick) {
FileOutputStream out= null;
BufferedWriter buffOut= null;try{if(fileDir != null) {
out= newFileOutputStream(fileDir);
buffOut= new BufferedWriter(newOutputStreamWriter(out));
String text=textArea.getText();if(text != null) {
buffOut.write(text);
}
buffOut.flush();
}else{
openChooseDialog("保存");
}
}catch(Exception ex) {
ex.printStackTrace();
}finally{try{if(out != null) {
out.close();
}if(buffOut != null) {
buffOut.close();
}
}catch(IOException e1) {
e1.printStackTrace();
}
}
}
}
@Overridepublic voidkeyReleased(KeyEvent e) {int keyCode =e.getKeyCode();if(17 ==keyCode) {
ctrlClick= false;
}else if(83 ==keyCode) {
sClick= false;
}
}
}
}