📄 jnotepad.java
字号:
// Problem 5.1 : JNotepad.java
// Author : Dai Zhenlong
// Date : 2007-07-20
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class JNotepad{
private static JMenuBar mb;
private static JTextArea ta;
private static JFrame f;
private static JFileChooser fc;
private static JScrollPane sp;
private static String fileName;
private static boolean isOpened;
private static Font ft;
public void createMenuBar(){
//创建菜单栏
mb = new JMenuBar();
JMenu mFile = new JMenu("文件");
JMenuItem miNew = new JMenuItem("新建",KeyEvent.VK_N);
miNew.addActionListener(new MenuListener());
JMenuItem miOpen = new JMenuItem("打开");
miOpen.addActionListener(new MenuListener());
JMenuItem miSave = new JMenuItem("保存");
miSave.addActionListener(new MenuListener());
JMenuItem miSaveAs = new JMenuItem("另存为");
miSaveAs.addActionListener(new MenuListener());
JMenuItem miExit = new JMenuItem("退出");
miExit.addActionListener(new MenuListener());
mFile.add(miNew); mFile.add(miOpen); mFile.addSeparator();
mFile.add(miSave); mFile.add(miSaveAs); mFile.addSeparator();
mFile.add(miExit);
JMenu mEdit = new JMenu("编辑");
JMenuItem miCut = new JMenuItem("剪切");
miCut.addActionListener(new MenuListener());
JMenuItem miCopy = new JMenuItem("复制");
miCopy.addActionListener(new MenuListener());
JMenuItem miPaste = new JMenuItem("粘贴");
miPaste.addActionListener(new MenuListener());
JMenuItem miDelete = new JMenuItem("删除");
miDelete.addActionListener(new MenuListener());
mEdit.add(miCut);mEdit.add(miCopy);
mEdit.add(miPaste);mEdit.add(miDelete);
JMenu mFormat = new JMenu("格式");
JMenuItem miFont = new JMenuItem("字体");
miFont.addActionListener(new MenuListener());
mFormat.add(miFont);
JMenu mHelp = new JMenu("帮助");
JMenuItem miAbout = new JMenuItem("关于记事本");
miAbout.addActionListener(new MenuListener());
mHelp.add(miAbout);
mb.add(mFile); mb.add(mEdit);
mb.add(mFormat); mb.add(mHelp);
//文本输入区
ta = new JTextArea(20,40);
ta.setLineWrap(true);
ta.setWrapStyleWord(true);
sp = new JScrollPane(ta);
//文件选择器
fc = new JFileChooser();
ft = null;
isOpened = false;
}
public static void main (String args[]){
try{
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
}catch (Exception e){}
f = new JFrame ("JNotePad");
JNotepad app = new JNotepad();
app.createMenuBar();
f.setJMenuBar (mb);
f.getContentPane().add(sp);
f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
f.setLocation(500,300);
f.pack();
f.setVisible(true);
}
public void saveText(String fName){
try{
FileOutputStream fos = new FileOutputStream(fName);
BufferedWriter bw = new BufferedWriter (new OutputStreamWriter(fos));
bw.write(ta.getText());
bw.close();
}catch(IOException e){}
}
class MenuListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if (e.getActionCommand() == "退出"){
if (isOpened == false && ta.getText() == null){}
else{
boolean noFileName = false;
if (fileName == null){
fileName = "无标题"; noFileName = true;
}
Object [] options = {"是","否","取消"};
int n = JOptionPane.showOptionDialog(f,"保存到"+fileName,"JNotePad",
JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,
null,options,options[2]);
if (n == 0){
if (noFileName){
int returnVal = fc.showOpenDialog(f);
if (returnVal == JFileChooser.APPROVE_OPTION){
File fl = fc.getSelectedFile();
fileName = fl.getAbsolutePath();
}
}
saveText(fileName);
}
else if (n == 1){}
else if (n == 2){return;}
}
System.exit(1);
}
else if (e.getActionCommand() == "打开"){
if (isOpened == true){
boolean noFileName = false;
boolean noNeedSave = false;
if (fileName == null){
if (ta.getText().length() == 0)
noNeedSave = true;
else{
fileName = "无标题";
noFileName = true;
}
}
if (!noNeedSave){
Object [] options = {"是","否","取消"};
int n = JOptionPane.showOptionDialog(f,"保存到"+fileName,"JNotePad",
JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,
null,options,options[2]);
if (n == 0){
if (noFileName){
int returnVal = fc.showOpenDialog(f);
if (returnVal == JFileChooser.APPROVE_OPTION){
File fl = fc.getSelectedFile();
fileName = fl.getAbsolutePath();
}
}
saveText(fileName);
ta.setText("");
}
else if (n == 1){}
else if (n == 2){return;}
}
}
int returnVal = fc.showOpenDialog(f);
if (returnVal == JFileChooser.APPROVE_OPTION){
File fl = fc.getSelectedFile();
fileName = fl.getAbsolutePath();
isOpened = true;
try{
FileInputStream fis = new FileInputStream(fileName);
BufferedReader br = new BufferedReader (new InputStreamReader(fis));
String s = br.readLine();
ta.setText(s+"\r\n");
while((s = br.readLine()) != null)
ta.append(s+"\r\n");
br.close();
}catch(IOException exp){}
}
}
else if (e.getActionCommand() == "新建"){
if (isOpened == true){
boolean noFileName = false;
if (fileName == null){
if (ta.getText().length() == 0)
return;
else{
fileName = "无标题";
noFileName = true;
}
}
Object [] options = {"是","否","取消"};
int n = JOptionPane.showOptionDialog(f,"保存到"+fileName,"JNotePad",
JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,
null,options,options[2]);
if (n == 0){
if (noFileName){
int returnVal = fc.showOpenDialog(f);
if (returnVal == JFileChooser.APPROVE_OPTION){
File fl = fc.getSelectedFile();
fileName = fl.getAbsolutePath();
}
}
saveText(fileName);
ta.setText("");
}
else if (n == 1){
ta.setText("");
isOpened = true;
fileName = null;
}
else if (n == 2){return;}
}
else{
ta.setText("");
}
isOpened = true;
fileName = null;
}
else if (e.getActionCommand() == "保存"){
if (fileName == null){
int returnVal = fc.showOpenDialog(f);
if (returnVal == JFileChooser.APPROVE_OPTION){
File fl = fc.getSelectedFile();
fileName = fl.getAbsolutePath();
}
}
saveText(fileName);
}
else if (e.getActionCommand() == "另存为"){
int returnVal = fc.showOpenDialog(f);
if (returnVal == JFileChooser.APPROVE_OPTION){
File fl = fc.getSelectedFile();
fileName = fl.getAbsolutePath();
}
saveText(fileName);
}
else if (e.getActionCommand() == "剪切"){
ta.cut();
}
else if (e.getActionCommand() == "复制"){
ta.copy();
}
else if (e.getActionCommand() == "粘贴"){
ta.paste();
}
else if (e.getActionCommand() == "删除"){
String content = ta.getText();
String head = content.substring(0,ta.getSelectionStart());
String tail = content.substring(ta.getSelectionEnd());
content = head + tail;
ta.setText(content);
}
else if (e.getActionCommand() == "字体"){
ft = NwFontChooserS.showDialog(f,null,ft);
ta.setFont(ft);
}
else if (e.getActionCommand() == "关于记事本")
JOptionPane.showMessageDialog(f,"作者:戴振龙\n日期:2007-07-20","关于记事本",JOptionPane.INFORMATION_MESSAGE);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -