📄 texteditor.java
字号:
package javadesign;
import java.awt.*;
import java.util.regex.*;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.filechooser.FileFilter;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import javax.swing.text.*;
import javax.swing.undo.UndoManager;
/*********************主类******************/
public class TextEditor{
/**main()方法*/
public static void main(String args[]) {
new Note();
}
}
/*************************Note类******************/
class Note {
private File currentFile=null;
private JFrame frame=new JFrame("无标题 - 文字编辑");
private JMenuBar menuBar = new JMenuBar(); //菜单栏
private JMenu fileMenu = new JMenu("文件(F)");
private JMenu editMenu = new JMenu("编辑(E)");
private JMenu formatMenu = new JMenu("格式(O)");
private JMenu helpMenu = new JMenu("帮助(H)");
private JMenu viewMenu = new JMenu("查看(V)");
private JToolBar toolbar = new JToolBar(); //工具条
private JMenuItem undoItem,redoItem,findItem, findnextItem;
private JButton newButton,openButton,saveButton,deleteButton;
private JButton undoButton,redoButton,copyButton,cutButton,pasteButton;
private JRadioButtonMenuItem windows,metal,motif;
private ButtonGroup group=new ButtonGroup();
private StyledDocument styledDoc=new DefaultStyledDocument();
public static JTextPane display; //JTextPane对象
private JScrollPane scroll;
private JPopupMenu popupmenu = new JPopupMenu(); //右键菜单
private Color color;
public static String font_name = "宋体";
public static int font_size = 20, font_type = Font.PLAIN;
public static int xp= 400, yp = 100;
private Container container=frame.getContentPane(); //获得内容面板
private Document doc ;
/** 添加撤消管理器 */
private UndoManager undomang=new UndoManager();
private UIManager.LookAndFeelInfo looks[]= UIManager.getInstalledLookAndFeels(); //风格
private JLabel statusbar=new JLabel();
public static boolean selectflag=true;
private boolean bold,italic,change,newflag,exitflag,windowflag;
private boolean openflag;/////////////////////////////////////
private static Toolkit tk = Toolkit.getDefaultToolkit();
private static Map<String,ImageIcon> iconsMap= new HashMap<String,ImageIcon>();
private static ImageIcon[] icons = null;
static {
icons = new ImageIcon[] {
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/title.gif")),
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/copy.gif")),
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/cut.gif")),
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/delete.gif")),
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/find.gif")),
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/help.gif")),
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/new.gif")),
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/open.gif")),
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/paste.gif")),
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/redo.gif")),
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/change.gif")),
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/top.gif")),
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/undo.gif")),
new ImageIcon(TextEditor.class.getClassLoader().getResource("images/save.gif")),
};
iconsMap.put("title", icons[0]);
iconsMap.put("copy", icons[1]);
iconsMap.put("cut", icons[2]);
iconsMap.put("delete", icons[3]);
iconsMap.put("find", icons[4]);
iconsMap.put("help", icons[5]);
iconsMap.put("new", icons[6]);
iconsMap.put("open", icons[7]);
iconsMap.put("paste",icons[8]);
iconsMap.put("redo", icons[9]);
iconsMap.put("change", icons[10]);
iconsMap.put("top", icons[11]);
iconsMap.put("undo", icons[12]);
iconsMap.put("save", icons[13]);
}
public Note() {
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); //窗口关闭时不自动处理
frame.setSize(500, 650); //设置窗口的大小
frame.setIconImage(Toolkit.getDefaultToolkit().getImage(TextEditor.class.getClassLoader().getResource("images/title.gif")));
frame.setLocation(400, 100); //设置窗口显示的位置
statusbar.setHorizontalAlignment(JLabel.RIGHT); //设置状态栏在右边显示信息
windows=new JRadioButtonMenuItem("系统风格",false); //风格按键初始化
motif=new JRadioButtonMenuItem("MOTIF风格",false);
metal=new JRadioButtonMenuItem("默认风格",true);
group.add(windows); //这样能实现单选
group.add(motif);
group.add(metal);
display= new JTextPane(styledDoc);
styledDoc.addDocumentListener(new documentLis());//
doc=display.getDocument();
toolbar.setEnabled(false); //设置工具条为不要编辑
doc.addUndoableEditListener(undomang); //添加事件监听
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
if(change) {
windowflag=true;
exitText();
} else System.exit(0);
}
});
fileMenu.setMnemonic(KeyEvent.VK_F);//添加相应的快捷方式
editMenu.setMnemonic(KeyEvent.VK_E);
formatMenu.setMnemonic(KeyEvent.VK_O);
helpMenu.setMnemonic(KeyEvent.VK_H);
viewMenu.setMnemonic(KeyEvent.VK_V);
container.setLayout(new BorderLayout()); //设置布局
container.add(display, "Center");
container.add(toolbar,"North");
container.add(statusbar,"South");
display.setFont(new Font("宋体", Font.PLAIN, 20)); //设置字体
scroll = new JScrollPane(display); //给文档加上滚动条
container.add(scroll);
frame.setJMenuBar(menuBar); //添加菜单栏
/** 生成监听器实例对象*/
ActionListener file = new fileAction();
ActionListener edit = new editAction();
ActionListener format = new formatAction();
ActionListener help = new helpAction();
MouseListener mouse = new mouseAction();
ActionListener view = new viewAction();
/**设置文件菜单*/
addMenuItem(KeyEvent.VK_N,0, "文件", "新建(N)", 'N', file,fileMenu,true,iconsMap.get("new"));
addMenuItem(KeyEvent.VK_O,1, "文件", "打开(O)...", 'O', file,fileMenu,false,iconsMap.get("open"));
addMenuItem(KeyEvent.VK_S,2, "文件", "保存(S)", 'S', file ,fileMenu,false,iconsMap.get("save"));
addMenuItem(KeyEvent.VK_A,3, "文件", "另存为(A)...", '0', file,fileMenu,false,null);
addMenuItem(KeyEvent.VK_X,4, "文件", "退出(X)", '0', file,fileMenu,false,null);
/**设置编辑菜单*/
addMenuItem(KeyEvent.VK_U,0, "编辑", "撤销(U)", 'Z', edit,editMenu,true,iconsMap.get("undo"));
addMenuItem(KeyEvent.VK_R,1, "编辑", "恢复(R)", 'Y', edit,editMenu,false,iconsMap.get("redo"));
addMenuItem(KeyEvent.VK_T,2, "编辑", "剪切(T)", 'X', edit,editMenu,false,iconsMap.get("cut"));
addMenuItem(KeyEvent.VK_C,3, "编辑", "复制(C)", 'C', edit,editMenu,false,iconsMap.get("copy"));
addMenuItem(KeyEvent.VK_P,4, "编辑", "粘贴(P)", 'V', edit,editMenu,false,iconsMap.get("paste"));
addMenuItem(KeyEvent.VK_L,5, "编辑", "删除(L)", '0', edit,editMenu,false,iconsMap.get("delete"));
addMenuItem(KeyEvent.VK_F,6, "编辑", "查找(F)", 'F', edit,editMenu,false,iconsMap.get("find"));
addMenuItem(KeyEvent.VK_N,7, "编辑", "查找下一个(N)", '0', edit,editMenu,false,null);
addMenuItem(KeyEvent.VK_E,8, "编辑", "替换(E)", 'Q', edit,editMenu,false,iconsMap.get("change"));
addMenuItem(KeyEvent.VK_A,9,"编辑", "全选(A)", 'A', edit,editMenu,false,null);
addMenuItem(KeyEvent.VK_D,10,"编辑", "时间/日期(D)", '0', edit,editMenu,false,null);
/**设置格式菜单*/
addMenuItem(KeyEvent.VK_W,0, "格式", "插入图片(W)", '0', format,formatMenu,true,null);
addMenuItem(KeyEvent.VK_F,1, "格式", "字体(F)", '0', format,formatMenu,false,null);
addMenuItem(KeyEvent.VK_C,2, "格式", "颜色(C)", '0', format,formatMenu,false,null);
addMenuItem(KeyEvent.VK_S,3,"格式","视图风格(S)",'0',format,formatMenu,false,null);
addMenuItem(KeyEvent.VK_U,4,"格式","下划线(U)",'0',format,formatMenu,false,null);
/**设置查看菜单*/
addMenuItem(KeyEvent.VK_W,1, "查看", "字数统计(W)", '0', view,viewMenu,true,null);
/**设置帮助菜单*/
addMenuItem(KeyEvent.VK_H,0, "帮助", "帮助主题(H)", '0', help,helpMenu,true,iconsMap.get("help"));
addMenuItem(KeyEvent.VK_A,1, "帮助", "关于(A)", '0', help,helpMenu,false,null);
/**设置右键菜单*/
addPopupMenu(KeyEvent.VK_U, "撤销(U)", mouse, edit);
addPopupMenu(KeyEvent.VK_R, "恢复(R)", mouse, edit);
addPopupMenu(KeyEvent.VK_T, "剪切(T)", mouse, edit);
addPopupMenu(KeyEvent.VK_C, "复制(C)", mouse, edit);
addPopupMenu(KeyEvent.VK_P, "粘贴(P)", mouse, edit);
addPopupMenu(KeyEvent.VK_L, "删除(L)", mouse, edit);
addPopupMenu(KeyEvent.VK_A, "全选(A)", mouse, edit);
addPopupMenu(KeyEvent.VK_D, "时间/日期(D)", mouse, edit);
/**设置工具条**/
addToolBar(0,"新建",iconsMap.get("new"),file);
addToolBar(1,"打开",iconsMap.get("open"),file);
addToolBar(2,"保存",iconsMap.get("save"),file);
addToolBar(3,"撤销",iconsMap.get("undo"),edit);
addToolBar(4,"恢复",iconsMap.get("redo"),edit);
addToolBar(5,"剪切",iconsMap.get("cut"),edit);
addToolBar(6,"复制",iconsMap.get("copy"),edit);
addToolBar(7,"粘贴",iconsMap.get("paste"),edit);
addToolBar(8,"删除",iconsMap.get("delete"),edit);
frame.setVisible(true);
}
/**addToolBar()方法用来设置工具条***/
private void addToolBar(int num,String label,ImageIcon icon,ActionListener listen) {
JButton button = new JButton(icon);
button.setToolTipText(label); //设置提示信息
toolbar.add(button); //添加按键
button.addActionListener(listen); //添加监听
toolbar.addSeparator(); //添加分隔条
switch(num){
case 0:newButton=button;break;
case 1:openButton=button;break;
case 2:saveButton=button;break;
case 3:undoButton=button;break;
case 4:redoButton=button;break;
case 5:cutButton=button;break;
case 6:copyButton=button;break;
case 7:pasteButton=button;break;
case 8:deleteButton=button;break;
}
}
/**addText()方法用来设置右键菜单*/
private void addPopupMenu(int num, String label, MouseListener listen1,ActionListener listen2) {
display.add(popupmenu);
JMenuItem menuItem = new JMenuItem(label);
menuItem.setMnemonic(num);
if (label.equals("剪切(T)") || label.equals("全选(A)"))
popupmenu.addSeparator(); //添加分隔条
popupmenu.add(menuItem);
display.addMouseListener(listen1);//注册监听器的接口MouseListener
menuItem.addActionListener(listen2);//注册监听器的接口ActionListener
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -