📄 notepad.java
字号:
package source;
//导入类
import java.nio.charset.Charset;
import java.nio.CharBuffer;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.JMenuBar;
import javax.swing.JPopupMenu;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JTextArea;
import javax.swing.text.Document;
import javax.swing.JMenuItem;
import javax.swing.JSplitPane;
import java.awt.Color;
import java.awt.Font;
import java.awt.FileDialog;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import javax.swing.event.CaretListener;
import javax.swing.event.CaretEvent;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.FileReader;
//主界面
public class Notepad extends JFrame
{
JPanel contentPane = null;
final static JTextArea jta = new JTextArea(20, 10);
final static ConsoleTextArea csta = new ConsoleTextArea(5, 10);
String fileDir = null;
String fileName = null;
String lastContent = "";
static int start = 0;
static String findWord = "";
static ConfigureFrame config = new ConfigureFrame();
static AppOutputCapture console = new AppOutputCapture(jta, csta);
//菜单栏
JMenuBar menuBar = new JMenuBar();
//文件菜单
JMenu fileMenu = new JMenu("文件(F)");
final JMenuItem systemExitMenuItem = new JMenuItem("退出(E)", KeyEvent.VK_E);
final JMenuItem fileSaveItem = new JMenuItem("另存为(A)", KeyEvent.VK_A);
final JMenuItem saveItem = new JMenuItem("保存(S)", KeyEvent.VK_S);
final JMenuItem fileOpenItem = new JMenuItem("打开(O)", KeyEvent.VK_O);
final JMenuItem newFileItem = new JMenuItem("新建(N)", KeyEvent.VK_N);
//弹出菜单
final JPopupMenu conPopMenu = new JPopupMenu();
final JMenuItem clsItem = new JMenuItem("清屏(C)", KeyEvent.VK_C);
final JMenuItem fileItem = new JMenuItem("保存(S)", KeyEvent.VK_S);
final JPopupMenu popMenu = new JPopupMenu();
final JMenu popChangeMenu = new JMenu("转换(B)");
final JMenuItem popCopyItem = new JMenuItem("复制(C)", KeyEvent.VK_C);
final JMenuItem popPasteItem = new JMenuItem("粘贴(P)", KeyEvent.VK_P);
final JMenuItem popCutItem = new JMenuItem("剪切(T)",KeyEvent.VK_T);
final JMenuItem popDelItem = new JMenuItem("删除(D)",KeyEvent.VK_D);
final JMenuItem popSelectItem = new JMenuItem("全选(A)", KeyEvent.VK_A);
final JMenuItem popFindItem = new JMenuItem("查找(F)", KeyEvent.VK_F);
final JMenuItem popPosItem = new JMenuItem("定位(P)", KeyEvent.VK_P);
final JMenu popSubMenu = new JMenu("替换(U)");
final JMenuItem popSubSingleItem = new JMenuItem("单个替换(P)", KeyEvent.VK_S);
final JMenuItem popSubWholeItem = new JMenuItem("替换所有(W)", KeyEvent.VK_W);
final JMenuItem popToLowItem = new JMenuItem("转换成小写(L)", KeyEvent.VK_L);
final JMenuItem popToUpItem = new JMenuItem("转换成大写(U)", KeyEvent.VK_U);
final JMenuItem popUpLowItem = new JMenuItem("大小写转换(X)", KeyEvent.VK_X);
final JMenuItem popSaveItem = new JMenuItem("保存文件(S)", KeyEvent.VK_S);
final JMenuItem popOpenItem = new JMenuItem("打开文件(O)", KeyEvent.VK_O);
final JMenuItem popNewItem = new JMenuItem("新建文件(N)", KeyEvent.VK_N);
//编辑菜单
JMenu editMenu = new JMenu("编辑(E)");
final JMenuItem copyItem = new JMenuItem("复制(C)", KeyEvent.VK_C);
final JMenuItem pasteItem = new JMenuItem("粘贴(P)", KeyEvent.VK_P);
final JMenu subMenu = new JMenu("替换(S)");
final JMenu changeMenu = new JMenu("转换(B)");
final JMenuItem cutItem = new JMenuItem("剪切(T)", KeyEvent.VK_T);
final JMenuItem deleteItem = new JMenuItem("删除(D)", KeyEvent.VK_D);
final JMenuItem findItem = new JMenuItem("查找(F)", KeyEvent.VK_F);
final JMenuItem subSingleItem = new JMenuItem("单个替换(P)", KeyEvent.VK_S);
final JMenuItem subWholeItem = new JMenuItem("替换所有(W)", KeyEvent.VK_W);
final JMenuItem toLowItem = new JMenuItem("转换成小写(L)", KeyEvent.VK_L);
final JMenuItem toUpItem = new JMenuItem("转换成大写(U)", KeyEvent.VK_U);
final JMenuItem upLowItem = new JMenuItem("大小写转换(X)", KeyEvent.VK_X);
final JMenuItem gotoItem = new JMenuItem("定位(G)", KeyEvent.VK_G);
final JMenuItem selectItem = new JMenuItem("全选(A)", KeyEvent.VK_A);
//工具菜单
JMenu toolsMenu = new JMenu("工具(T)");
final JMenuItem transItem = new JMenuItem("翻译(T)", KeyEvent.VK_T);
final JMenuItem compileItem = new JMenuItem("编译Java(C)", KeyEvent.VK_C);
final JMenuItem runItem = new JMenuItem("运行Java(R)", KeyEvent.VK_R);
final JMenuItem docItem = new JMenuItem("生成文档(D)", KeyEvent.VK_D);
final JMenu appletRun = new JMenu("运行Applet(A)");
final JMenuItem appletHtmlItem = new JMenuItem("浏览器运行Applet(B)", KeyEvent.VK_B);
final JMenuItem appletViewItem = new JMenuItem("查看器运行Applet(V)", KeyEvent.VK_V);
final JMenuItem commandItem = new JMenuItem("Java常用命令(O)", KeyEvent.VK_O);
final JMenuItem cmdItem = new JMenuItem("新CMD窗口(N)", KeyEvent.VK_N);
//高级菜单
JMenu advancedMenu = new JMenu("高级(A)");
final JMenuItem readOnlyModeItem = new JMenuItem("只读模式(R)", KeyEvent.VK_R);
final JMenuItem readWriteModeItem = new JMenuItem("正常模式(N)", KeyEvent.VK_N);
final JMenuItem configItem = new JMenuItem("系统配置(C)", KeyEvent.VK_C);
//帮助菜单
final JMenuItem how_to_use_MenuItem = new JMenuItem("用法指南(U)", KeyEvent.VK_U);
final JMenuItem aboutUS_MenuItem = new JMenuItem("关于我们(A)", KeyEvent.VK_A);
final JMenuItem versionMenuItem = new JMenuItem("版本信息(V)",KeyEvent.VK_V);
//大小写转换方法
private String upLowSwitch(String sourceStr, int LEN)
{
char charTemp = '0';
StringBuffer sourceStrBuf = new StringBuffer();
for(int i = 0; i < LEN; i++)
{
charTemp = sourceStr.charAt(i);
if(Character.isISOControl(charTemp))
{
sourceStrBuf = sourceStrBuf.append(charTemp);
continue;
}
if(Character.isLowerCase(charTemp))
{
sourceStrBuf = sourceStrBuf.append(Character.toUpperCase(charTemp));
}
else
{
sourceStrBuf = sourceStrBuf.append(Character.toLowerCase(charTemp));
}
}
sourceStr = sourceStrBuf.toString();
return sourceStr;
}
//构造方法
public Notepad()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e)
{
JOptionPane.showMessageDialog(Notepad.this,
e.toString() + ":\n运行时错误!",
"出错啦!", JOptionPane.INFORMATION_MESSAGE);
}
//窗口初始化
setTitle("CoffeeEditor");
ImageIcon icon=new ImageIcon("file\\wolf.gif");
Image image=icon.getImage();
setIconImage(image);
setSize(800, 550);
setResizable(true);
contentPane = (JPanel) this.getContentPane();
jta.setBackground(config.backColor);
jta.setForeground(config.foreColor);
jta.setSelectionColor(config.selectColor);
csta.setBackground(config.conBackColor);
csta.setForeground(config.conForeColor);
csta.setSelectionColor(config.conSelColor);
jta.setFont(new Font("宋体", Font.PLAIN, 16));
csta.setFont(new Font("宋体", Font.PLAIN, 14));
csta.setEditable(false);
//退出系统
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
String tempStr = jta.getText();
if(lastContent.equals(tempStr))
System.exit(0);
int message = JOptionPane.showConfirmDialog(Notepad.this,
"是否保存文件?","保存",
JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
if(message == 0)
{
BufferedWriter bw = null;
if((fileName == null) || (fileDir == null))
{
FileDialog fdg = new FileDialog(Notepad.this, "保存", FileDialog.SAVE);
fdg.setVisible(true);
fileDir = fdg.getDirectory();
fileName = fdg.getFile();
try
{
bw = new BufferedWriter(new FileWriter(new File(fileDir, fileName)));
bw.write(tempStr);
bw.close();
System.exit(0);
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(Notepad.this,
ex.toString() + ":\n写入文件出错!",
"出错啦!", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}
else
{
try
{
bw = new BufferedWriter(new FileWriter(new File(fileDir, fileName)));
bw.write(tempStr);
bw.close();
System.exit(0);
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(Notepad.this,
ex.toString() + ":\n写入文件出错!",
"出错啦!", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}
}
else if(message == 1)
{
System.exit(0);
}
else
{
return;
}
}
});
//菜单栏
menuBar.setBackground(config.menuColor);
//文件菜单
fileMenu.setBackground(config.menuColor);
fileMenu.setMnemonic(KeyEvent.VK_F);
//弹出菜单
popChangeMenu.setMnemonic(KeyEvent.VK_B);
popPasteItem.setEnabled(false);
popSubMenu.setMnemonic(KeyEvent.VK_U);
//编辑菜单
editMenu.setBackground(config.menuColor);
editMenu.setMnemonic(KeyEvent.VK_E);
pasteItem.setEnabled(false);
subMenu.setMnemonic(KeyEvent.VK_S);
changeMenu.setMnemonic(KeyEvent.VK_B);
//工具菜单
toolsMenu.setBackground(config.menuColor);
toolsMenu.setMnemonic(KeyEvent.VK_T);
appletRun.setMnemonic(KeyEvent.VK_A);
//高级菜单
advancedMenu.setBackground(config.menuColor);
advancedMenu.setMnemonic(KeyEvent.VK_A);
//帮助菜单
//退出菜单项
systemExitMenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String tempStr = jta.getText();
if(lastContent.equals(tempStr))
System.exit(0);
int message = JOptionPane.showConfirmDialog(Notepad.this,
"是否保存文件?","保存",
JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
if(message == 0)
{
BufferedWriter bw = null;
if((fileName == null) || (fileDir == null))
{
FileDialog fdg = new FileDialog(Notepad.this, "保存", FileDialog.SAVE);
fdg.setVisible(true);
fileDir = fdg.getDirectory();
fileName = fdg.getFile();
try
{
bw = new BufferedWriter(new FileWriter(new File(fileDir, fileName)));
bw.write(tempStr);
bw.close();
System.exit(0);
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(Notepad.this,
ex.toString() + ":\n写入文件出错!",
"出错啦!", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}
else
{
try
{
bw = new BufferedWriter(new FileWriter(new File(fileDir, fileName)));
bw.write(tempStr);
bw.close();
System.exit(0);
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(Notepad.this,
ex.toString() + ":\n写入文件出错!",
"出错啦!", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}
}
else if(message == 1)
{
System.exit(0);
}
else
{
return;
}
}
});
//文件另存为菜单项
fileSaveItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
FileDialog fdg = new FileDialog(Notepad.this, "保存", FileDialog.SAVE);
fdg.setVisible(true);
fileDir = fdg.getDirectory();
fileName = fdg.getFile();
String str = jta.getText();
lastContent = str;
BufferedWriter bw = null;
try
{
bw = new BufferedWriter(new FileWriter(new File(fileDir, fileName)));
bw.write(str);
bw.close();
Notepad.this.setTitle("CoffeeEditor " + "[" +
fileDir + fileName + "]");
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(fileSaveItem,
ex.toString() + ":\n写入文件出错!",
"出错啦!", JOptionPane.INFORMATION_MESSAGE);
}
}
});
//保存文件菜单
saveItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String str = jta.getText();
lastContent = str;
BufferedWriter bw = null;
if((fileName == null) || (fileDir == null))
{
FileDialog fdg = new FileDialog(Notepad.this, "保存", FileDialog.SAVE);
fdg.setVisible(true);
fileDir = fdg.getDirectory();
fileName = fdg.getFile();
try
{
bw = new BufferedWriter(new FileWriter(new File(fileDir, fileName)));
bw.write(str);
bw.close();
Notepad.this.setTitle("CoffeeEditor " + "[" +
fileDir + fileName + "]");
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(saveItem,
ex.toString() + ":\n写入文件出错!",
"出错啦!", JOptionPane.INFORMATION_MESSAGE);
}
}
else
{
try
{
bw = new BufferedWriter(new FileWriter(new File(fileDir, fileName)));
bw.write(str);
bw.close();
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(saveItem,
ex.toString() + ":\n写入文件出错!",
"出错啦!", JOptionPane.INFORMATION_MESSAGE);
}
}
}
});
//打开文件菜单项
fileOpenItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
FileDialog fdg = new FileDialog(Notepad.this, "打开", FileDialog.LOAD);
FileDialog fdgSave = new FileDialog(Notepad.this, "保存", FileDialog.SAVE);
BufferedWriter bw = null;
StringBuffer textStrb = new StringBuffer();
BufferedReader br = null;
String str = jta.getText();
if(!str.equals(lastContent))
{
int message = JOptionPane.showConfirmDialog(fileOpenItem,
"是否保存文件?","保存",
JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
if(message == 0)
{
if((fileName == null) || (fileDir == null))
{
fdgSave.setVisible(true);
fileDir = fdgSave.getDirectory();
fileName = fdgSave.getFile();
try
{
bw = new BufferedWriter(new FileWriter(new File(fileDir, fileName)));
bw.write(str);
bw.close();
Notepad.this.setTitle("CoffeeEditor " + "[" +
fileDir + fileName + "]");
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(newFileItem,
ex.toString() + ":\n写入文件出错!",
"出错啦!", JOptionPane.INFORMATION_MESSAGE);
Notepad.this.setTitle("CoffeeEditor " + "[" +
fileDir + fileName + "]");
}
}
else
{
try
{
bw = new BufferedWriter(new FileWriter(new File(fileDir, fileName)));
bw.write(str);
bw.close();
Notepad.this.setTitle("CoffeeEditor " + "[" +
fileDir + fileName + "]");
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(newFileItem,
ex.toString() + ":\n写入文件出错!",
"出错啦!", JOptionPane.INFORMATION_MESSAGE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -