📄 mytext.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import javax.swing.undo.*;
import java.util.*;
class UserInterface extends JFrame{
// 设置界面
JFrame frame = new JFrame("我的记事本");
JColorChooser colorchooser=new JColorChooser();//
// 设置菜单项目
JMenuItem
menuFileNew, menuFileOpen, menuFileSave, menuFileSaveAs,
menuFileExit,menuEditCut, menuEditCopy, menuEditPaste,
menuSelectAll,menuEditDeleteSelection, menuGsziti,
timePerformed, menuHelpAbout;
//设置可选择菜单
JCheckBoxMenuItem menuViewWordWrap;
// 设置菜单分类
JMenu menuFile, menuEdit, menuView, menuHelp,menuGs;
// 设置右键菜单项目
JMenuItem
RCMenuCut, RCMenuCopy, RCMenuPaste, RCMenuSelectAll,RCTimePerformed,RCMenuEditDeleteSelection;
// 设置菜单条
JMenuBar mb = new JMenuBar();
JPopupMenu popup = new JPopupMenu();
// 设置文本编辑区
JScrollPane scrollPane;
JTextArea textArea;
// 设置监听器
MyListener ML = new MyListener();
PopupListener PL = new PopupListener();
// 设置其它系统参数
boolean isFileSave = false;
boolean isFileNew = true;
int receiveReturnPara;
private void setMenu() {
// ---------- 设置菜单分类 ----------
menuFile = new JMenu("文件(F) ", true);
menuFile.setMnemonic(KeyEvent.VK_F);
menuEdit = new JMenu("编辑(E)", true);
menuEdit.setMnemonic(KeyEvent.VK_E);
menuGs = new JMenu("格式(O)", true);
menuGs.setMnemonic(KeyEvent.VK_O);
menuView = new JMenu("查看(V)", true);
menuView.setMnemonic(KeyEvent.VK_V);
menuHelp = new JMenu("帮助(H)", true);
menuHelp.setMnemonic(KeyEvent.VK_H);
// ---------- 菜单分类结束 ----------
// 文件 新建菜单
menuFileNew = new JMenuItem("新建", 'N');
menuFileNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
InputEvent.CTRL_MASK));
menuFileNew.addActionListener(ML);
// 文件 打开菜单
menuFileOpen = new JMenuItem("打开(O)", 'O');
menuFileOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
InputEvent.CTRL_MASK));
menuFileOpen.addActionListener(ML);
// 文件 保存菜单
menuFileSave = new JMenuItem("保存(S)", 'S');
menuFileSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_MASK));
menuFileSave.addActionListener(ML);
// 文件 另存为菜单
menuFileSaveAs = new JMenuItem("另存为(A)... ", 'A');
menuFileSaveAs.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F12, 0));
menuFileSaveAs.addActionListener(ML);
// 文件 关闭菜单
menuFileExit = new JMenuItem("退出(X)", 'X');
menuFileExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,
InputEvent.ALT_MASK));
menuFileExit.addActionListener(ML);
// 编辑 剪切菜单
menuEditCut = new JMenuItem("剪切(T) ", 'T');
menuEditCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
InputEvent.CTRL_MASK));
menuEditCut.addActionListener(ML);
// 编辑 复制菜单
menuEditCopy = new JMenuItem("复制(C) ", 'C');
menuEditCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
InputEvent.CTRL_MASK));
menuEditCopy.addActionListener(ML);
// 编辑 粘贴菜单
menuEditPaste = new JMenuItem("粘贴(P) ", 'P');
menuEditPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
InputEvent.CTRL_MASK));
menuEditPaste.addActionListener(ML);
// 编辑 全选菜单
menuSelectAll = new JMenuItem("全选(A) ", 'A');
menuSelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,
InputEvent.CTRL_MASK));
menuSelectAll.addActionListener(ML);
// 编辑 删除菜单
menuEditDeleteSelection = new JMenuItem("删除(L) ", 'L');
menuEditDeleteSelection.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
menuEditDeleteSelection.addActionListener(ML);
// 编辑 时间菜单
timePerformed = new JMenuItem("时间/日期(D) ", 'D');
timePerformed.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,
InputEvent.CTRL_MASK));
timePerformed.addActionListener(ML);
// 格式 字体菜单
menuGsziti = new JMenuItem("字体颜色(F) ", 'F');
menuGsziti.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,
InputEvent.CTRL_MASK));
menuGsziti.addActionListener(ML);
// 视图 自动换行
menuViewWordWrap = new JCheckBoxMenuItem("自动换行 ");
menuViewWordWrap.setMnemonic('W');
menuViewWordWrap.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,
InputEvent.CTRL_MASK));
menuViewWordWrap.setState(false);
menuViewWordWrap.addActionListener(ML);
// 帮助 关于
menuHelpAbout = new JMenuItem("关于记事本(A) ", 'A');
menuHelpAbout.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
menuHelpAbout.addActionListener(ML);
}
private void setRightClickMenu() {
// 设置右键菜单
RCMenuCut = new JMenuItem("剪切(T) ", 'T');
RCMenuCut.addActionListener(ML);
RCMenuCopy = new JMenuItem("复制(C) ", 'C');
RCMenuCopy.addActionListener(ML);
RCMenuPaste = new JMenuItem("粘贴(P) ", 'P');
RCMenuPaste.addActionListener(ML);
RCMenuEditDeleteSelection = new JMenuItem("删除(L) ", 'L');
RCMenuEditDeleteSelection.addActionListener(ML);
RCMenuSelectAll = new JMenuItem("全选(S) ", 'S');
RCMenuSelectAll.addActionListener(ML);
RCTimePerformed = new JMenuItem("时间/日期(D) ", 'D');
RCTimePerformed.addActionListener(ML);
}
private void setUI() {
frame.getContentPane().setLayout(new BorderLayout());
frame.setJMenuBar(mb);
JPanel p = new JPanel();
// 为文件菜单添加项目
mb.add(menuFile);
menuFile.add(menuFileNew);
menuFile.add(menuFileOpen);
menuFile.add(menuFileSave);
menuFile.add(menuFileSaveAs);
menuFile.addSeparator(); // 分割线
menuFile.add(menuFileExit);
// 为编辑菜单添加项目
mb.add(menuEdit);
menuEdit.add(menuEditCut);
menuEdit.add(menuEditCopy);
menuEdit.add(menuEditPaste);
menuEdit.add(menuSelectAll);
menuEdit.add(menuEditDeleteSelection);
menuEdit.addSeparator();
menuEdit.add(timePerformed);
// 为格式菜单添加项目
mb.add(menuGs);
menuGs.add(menuGsziti);
// 为查看菜单添加项目
mb.add(menuView);
menuView.add(menuViewWordWrap);
// 为帮助菜单添加项目
mb.add(menuHelp);
menuHelp.add(menuHelpAbout);
// 添加右键菜单
popup.add(RCMenuCut);
popup.add(RCMenuCopy);
popup.add(RCMenuPaste);
popup.add(RCMenuEditDeleteSelection);
popup.add(RCMenuSelectAll);
popup.add(RCTimePerformed);
// 添加滚动区域
scrollPane = new JScrollPane();
JViewport port = scrollPane.getViewport();
textArea = new JTextArea(); //创建文本区域
textArea.setFont(new Font("Fixedsys", Font.PLAIN, 14)); //设置字体 大小
port.add(textArea);
// 添加组件
frame.add("Center", scrollPane);
// 添加右键菜单响应
textArea.addMouseListener(PL);
// 添加窗口事件
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
if(!isFileSave) {
MyActions MA =new MyActions();
receiveReturnPara = MA.fileNotSaveMessage();
String s = new String("");
if (receiveReturnPara == 0){
// 如果选择“是”,则调用保存文件方法,然后再关闭。
try {
PrintWriter out = new PrintWriter(new BufferedWriter(
new FileWriter((s =MA.fileSaveAs()))));
out.print(textArea.getText());
out.close();
} catch (IOException e1) {
e1.printStackTrace();
}
isFileSave = true;
System.exit(0);
} else if (receiveReturnPara == 1) {
// 如果选择“否”,则直接关闭,并告知文件尚未保存。
System.exit(0);
}
} else
System.exit(0);
}
});
// 设置窗口使可见
frame.setSize(800,600);
frame.setVisible(true);
}
void startApp() {
setMenu();
setRightClickMenu();
setUI();
}
class PopupListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
private void maybeShowPopup(MouseEvent e) {
if(e.isPopupTrigger())
popup.show(((JTextArea)e.getComponent()), e.getX(), e.getY());
}
}
class MyListener implements ActionListener {
MyActions MA = new MyActions();
Color color=Color.red;
void saveFile() {
try {
PrintWriter out = new PrintWriter(new BufferedWriter(
new FileWriter(MA.fileSaveAs())));
out.print(textArea.getText());
out.close();
} catch (IOException e1) {
e1.printStackTrace();
}
isFileSave = true;
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == menuFileNew) {
// 如果没有保存,则在新建文件时候询问
if(!isFileSave) {
receiveReturnPara = MA.fileNotSaveMessage();
if (receiveReturnPara == 0){
// 如果选择“是”,则调用保存的方法,新建文件,并且告知文件是尚未保存的。
textArea.setText("");
isFileSave = false;
} else {
// 如果选择“否”,则直接新建文件,并告知文件尚未保存。
textArea.setText("");
isFileSave = false;
}
} else
textArea.setText("");
}
else if (e.getSource() == menuFileOpen) {
// 如果没有保存,则在新建文件时候询问
if(!isFileSave) {
receiveReturnPara = MA.fileNotSaveMessage();
if (receiveReturnPara == 0){
// 如果选择“是”,则调用保存文件方法,然后再调用打开文件方法。
// 并且告知新开文件是尚未保存的。
textArea.setText("");
textArea.setText(MA.fileOpen());
isFileSave = false;
} else {
// 如果选择“否”,则直接打开文件,并告知文件尚未保存。
textArea.setText("");
textArea.setText(MA.fileOpen());
isFileSave = false;
}
} else {
textArea.setText("");
textArea.setText(MA.fileOpen());
}
}
else if (e.getSource() == menuFileSave) {
saveFile();
}
else if (e.getSource() == menuFileSaveAs) {
saveFile();
}
else if (e.getSource() == menuFileExit) {
if(!isFileSave) {
receiveReturnPara = MA.fileNotSaveMessage();
if (receiveReturnPara == 0){
// 如果选择“是”,则调用保存文件方法,然后再关闭。
saveFile();
System.exit(1);
} else {
// 如果选择“否”,则直接关闭,并告知文件尚未保存。
System.exit(1);
}
} else
System.exit(1);
}
else if ((e.getSource() == menuEditCut) || (e.getSource() == RCMenuCut)) {
textArea.cut(); //剪切 //鼠标右键事件
}
else if ((e.getSource() == menuEditCopy) || (e.getSource() == RCMenuCopy)){
textArea.copy(); //复制
}
else if ((e.getSource() == menuEditPaste) || (e.getSource() == RCMenuPaste)) {
textArea.paste(); //粘贴
}
else if ((e.getSource() == menuSelectAll) || (e.getSource() == RCMenuSelectAll)) {
textArea.selectAll(); //显示全部
}
else if(e.getSource() == menuViewWordWrap) {
if (menuViewWordWrap.getState()) {
textArea.setLineWrap(true); //自动换行
} else {
textArea.setLineWrap(false);
}
}
else if ((e.getSource() == timePerformed) || (e.getSource() == RCTimePerformed) ) { //插入时间
textArea.insert((new Date()).toString(), textArea.getSelectionEnd());
}
else if ((e.getSource() == menuEditDeleteSelection)|| (e.getSource() == RCMenuEditDeleteSelection) ) { //删除
textArea.replaceRange(null, textArea.getSelectionStart(), textArea.getSelectionEnd());
}
else if((e.getSource() == menuGsziti)){
color=JColorChooser.showDialog(UserInterface.this,"",color); //字体颜色
textArea.setForeground(color);
}
else if(e.getSource() == menuHelpAbout) {
JOptionPane.showConfirmDialog(null, //对话框
"==== 简易记事本 ====\n咸宁学院计算机系n\t\t 何浩波\n 2008 年6月 10 日\n",
"关于",JOptionPane.CLOSED_OPTION);
}
}
}
}
public class Mytext {
public static void main(String[] args) {
UserInterface Mytext = new UserInterface();
Mytext.startApp();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -