📄 mytexteditor.java
字号:
/* *
*题目:记事本程序
*Author: wjz
* 2007-06-20
***/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.util.*;
import javax.swing.text.*;
public class MyTextEditor implements ActionListener{
boolean isChanged = true;
boolean isSaved;
String filename = "";
String strtext = "";
Color textColor; //字体颜色
////////// 菜单栏各选项 ////////////////
JFrame frame1 = new JFrame("我的记事本");
JTextArea text = new JTextArea(); //文本编辑区
JLabel statusbar = new JLabel("状态栏");
JMenuBar Mbar = new JMenuBar(); //菜单栏
JFileChooser jFileChooser1 = new JFileChooser(new File(".")); //打开或保存的文件对话框
JMenu jFile = new JMenu("文件"); //文件菜单
JMenu jEdit = new JMenu("编辑"); //编辑菜单
JMenu jFormat = new JMenu("格式"); //格式菜单
JMenu jHelp = new JMenu("帮助"); //帮主菜单
JMenuItem jnew,jopen,jsave,jsaveas,jquit;
JMenuItem jcut,jcopy,jpaste,jfind,jreplace,jselectall,jdate;
JMenuItem jchangeLine,jfont,jcolor;
JMenuItem jabout;
public MyTextEditor() { ///MyTextEditor构造函数
this.isChanged = false;
this.isSaved = false;
final BorderLayout borderLayout1 = new BorderLayout();
frame1.setSize(600,500); //
JPanel panel=new JPanel();
panel.setLayout(borderLayout1); //布局
panel.add(new JScrollPane(text)); //滚动条
panel.add(statusbar,borderLayout1.SOUTH); //状态栏--显示查找等操作的结果
frame1.getContentPane().add(panel);
frame1.setJMenuBar(Mbar); //将主菜单添加到窗体中
/*text.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent ec) {
isChanged = true;
}
});*/
/** jnew 新建文件菜单项 **/
jnew = new JMenuItem("新建(N)");
jnew.addActionListener(this);
jnew.setMnemonic('N'); //设置热键
jnew.setAccelerator(KeyStroke.getKeyStroke('N',java.awt.Event.CTRL_MASK,true)); //添加快捷键
/** jopen 打开文件菜单项**/
jopen = new JMenuItem("打开(O)");
jopen.addActionListener(this);
jopen.setMnemonic('O');
jopen.setAccelerator(KeyStroke.getKeyStroke('O',java.awt.Event.CTRL_MASK,true));
/** jsave 保存文件菜单项**/
jsave = new JMenuItem("保存(S)");
jsave.addActionListener(this);
jsave.setMnemonic('S');
jsave.setAccelerator(KeyStroke.getKeyStroke('S',java.awt.Event.CTRL_MASK,true));
/** jsave as 另存为菜单项**/
jsaveas = new JMenuItem("另存为...");
jsaveas.addActionListener(this);
/** jquit 退出菜单项**/
jquit = new JMenuItem("关闭(Q)");
jquit.addActionListener(this);
jquit.setMnemonic('Q');
jquit.setAccelerator(KeyStroke.getKeyStroke('Q',java.awt.Event.CTRL_MASK,true));
//------------------------------------
// jFile code of end
//--------------------------------------
/*** jEdit code */
/** jcut 剪切菜单项 **/
jcut = new JMenuItem("剪切(X)");
jcut.addActionListener(this);
jcut.setMnemonic('X');
jcut.setAccelerator(KeyStroke.getKeyStroke('X',java.awt.Event.CTRL_MASK,true));
/** jcopy 复制菜单项 **/
jcopy = new JMenuItem("复制(C)");
jcopy.addActionListener(this);
jcopy.setMnemonic('C');
jcopy.setAccelerator(KeyStroke.getKeyStroke('C',java.awt.Event.CTRL_MASK,true));
/** jpaste 粘贴菜单项 **/
jpaste = new JMenuItem("粘贴(V)");
jpaste.addActionListener(this);
jpaste.setMnemonic('V');
jpaste.setAccelerator(KeyStroke.getKeyStroke('V',java.awt.Event.CTRL_MASK,true));
/** jfind 查找菜单项 **/
jfind = new JMenuItem("查找(F)");
jfind.addActionListener(this);
jfind.setMnemonic('F');
jfind.setAccelerator(KeyStroke.getKeyStroke('F',java.awt.Event.CTRL_MASK,true));
/** jreplace 替换菜单项 **/
jreplace = new JMenuItem("替换(R)");
jreplace.addActionListener(this);
jreplace.setMnemonic('R');
jreplace.setAccelerator(KeyStroke.getKeyStroke('R',java.awt.Event.CTRL_MASK,true));
/**jselectall 全选菜单项 **/
jselectall=new JMenuItem("全选(A)");
jselectall.addActionListener(this);
jselectall.setMnemonic('A');
jselectall.setAccelerator(KeyStroke.getKeyStroke('A',java.awt.Event.CTRL_MASK,true));
/**jdate 时间日期 **/
jdate = new JMenuItem("时间/日期(D)");
jdate.addActionListener(this);
jdate.setMnemonic('D');
jdate.setAccelerator(KeyStroke.getKeyStroke('D',java.awt.Event.CTRL_MASK,true));
//------------------------------
// jEdit code of end
//-----------------------------
/** jchangeLine 自动换行菜单项 **/
jchangeLine = new JMenuItem("自动换行");
jchangeLine.addActionListener(this);
/** jfont 字体设置菜单项 **/
jfont = new JMenuItem("字体..");
jfont.addActionListener(this);
/** jfont 颜色设置菜单项 **/
jcolor = new JMenuItem("文字颜色");
jcolor.addActionListener(this);
//--------------------------------------------------
// jFormat code of end
//--------------------------------------------------
/** jabout 关于菜单项 **/
jabout = new JMenuItem("关于(A)");
jabout.addActionListener(this);
jabout.setMnemonic('A');
jabout.setAccelerator(KeyStroke.getKeyStroke('W',java.awt.Event.CTRL_MASK,true));
//-------------------------------------------------
// jHelp code of end
//------------------------------------------------------
//将各选项添加到所在位置
Mbar.add(jFile);
Mbar.add(jEdit);
Mbar.add(jFormat);
Mbar.add(jHelp);
jFile.add(jnew);
jFile.add(jopen);
jFile.addSeparator();
jFile.add(jsave);
jFile.add(jsaveas);
jFile.addSeparator();
jFile.add(jquit);
jEdit.add(jcut);
jEdit.add(jcopy);
jEdit.add(jpaste);
jEdit.addSeparator();
jEdit.add(jfind);
jEdit.add(jreplace);
jEdit.addSeparator();
jEdit.add(jselectall);
jEdit.add(jdate);
jFormat.add(jchangeLine);
jFormat.addSeparator();
jFormat.add(jfont);
jFormat.add(jcolor);
jHelp.add(jabout);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == jnew) { //新建
if((this.isChanged)||(!isSaved)){ //文件改变或未保存时
int n = JOptionPane.showConfirmDialog(null,
"想先保存文件吗?", "记事本", JOptionPane.YES_NO_OPTION);
if(n == JOptionPane.NO_OPTION){
text.setText(""); //清空文本框
frame1.setTitle("未命名"); //
statusbar.setText("新建文本"); //设置状态栏
isSaved = false; //将新建文件状态设为未保存
}
else if(n == JOptionPane.YES_OPTION) {
save();
}
}
else {
text.setText(""); //清空文本框
frame1.setTitle("未命名"); //
statusbar.setText("新建文本"); //设置状态栏
isSaved = false; //将新建文件状态设为未保存
}
}
else if(e.getSource() == jopen) { //打开
if((this.isChanged)||(!isSaved)){ //文件改变或未保存时
int n = JOptionPane.showConfirmDialog(null,
"想先保存文件吗?", "记事本", JOptionPane.YES_NO_OPTION);
if(n == JOptionPane.NO_OPTION){
open();
}
else if(n == JOptionPane.YES_OPTION) {
save();
}
}
else {
open();
}
}
else if(e.getSource() == jsave) { //保存
save();
}
else if(e.getSource() == jsaveas) { //另存为
if(this.jFileChooser1.APPROVE_OPTION == this.jFileChooser1.showSaveDialog(frame1)){
this.filename = this.jFileChooser1.getSelectedFile().getPath();
save();
}
else{
System.out.println("!!!");
}
}
else if(e.getSource() == jquit) { //退出
System.exit(0);
}
else if(e.getSource() == jcut) { //剪切
try {
String str = this.text.getSelectedText();
if(str.length() != 0){
this.strtext = str;
this.text.replaceRange("",this.text.getSelectionStart(),this.text.getSelectionEnd());
this.isChanged = true;
}
}
catch(Exception ex){
this.statusbar.setText("剪切出错:"+ex.getMessage());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -