📄 mytxt.java
字号:
/**
*
*/
package com.tiankong;
/**
* @author Administrator
*
*/
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.filechooser.FileFilter;
import java.io.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.DataFlavor;
import javax.swing.undo.*;
public class MyTxt extends JFrame implements ActionListener{
int position;
int endposition;
String savesearch;
boolean selectjr;
boolean daxiao;
boolean isNewText;
String OldText="";
String Filename;
boolean NotSave=true;
String tihuanText;
boolean tihuandaxiao;
JPopupMenu jpm=new JPopupMenu();
JMenuItem jp_Undo=new JMenuItem("撤销(Z)",'Z');
JMenuItem jp_Cut=new JMenuItem("剪切(X)",'X');
JMenuItem jp_Copy=new JMenuItem("复制(C)",'C');
JMenuItem jp_Parst=new JMenuItem("粘贴(V)",'V');
JMenuItem jp_Del=new JMenuItem("删除(L)",'L');
JMenuItem jp_SelectAll=new JMenuItem("全选(A)",'A');
Clipboard cb;
Toolkit t=Toolkit.getDefaultToolkit();
JPanel status=new JPanel();
JLabel statuslabel=new JLabel("My Notepad,按F1可获得帮助");
JMenuBar jmb=new JMenuBar();
JMenu jm1=new JMenu("文件(F)");
JMenu jm2=new JMenu("编辑(E)");
JMenu jm3=new JMenu("格式(O)");
JMenu jm4=new JMenu("查看(V)");
JMenu jm5=new JMenu("帮助(H)");
JMenuItem ji1=new JMenuItem("新建(N)",'N');
JMenuItem ji2=new JMenuItem("打开(O)...",'O');
JMenuItem ji3=new JMenuItem("保存(S)",'S');
JMenuItem ji4=new JMenuItem("另存为(A)...",'A');
JMenuItem ji5=new JMenuItem("页面设置(U)...",'U');
JMenuItem ji6=new JMenuItem("打印(P)...",'P');
JMenuItem ji7=new JMenuItem("退出(X)",'X');
JMenuItem ji8=new JMenuItem("撤销(Z)",'Z');
JMenuItem ji9=new JMenuItem("剪切(X)",'X');
JMenuItem ji10=new JMenuItem("复制(C)",'C');
JMenuItem ji11=new JMenuItem("粘贴(V)",'V');
JMenuItem ji12=new JMenuItem("删除(L)",'L');
JMenuItem ji13=new JMenuItem("查找(F)...",'F');
JMenuItem ji14=new JMenuItem("查找下一个(N)",'N');
JMenuItem ji15=new JMenuItem("替换(R)...",'R');
JMenuItem ji16=new JMenuItem("转到(G)...",'G');
JMenuItem ji17=new JMenuItem("全选(A)",'A');
JMenuItem ji18=new JMenuItem("时间/日期",'D');
JCheckBoxMenuItem ji19=new JCheckBoxMenuItem("自动换行(W)");
JMenuItem ji20=new JMenuItem("字体设置(F)...",'F');
JCheckBoxMenuItem ji21=new JCheckBoxMenuItem("状态栏(S)");
JMenuItem ji22=new JMenuItem("帮助主题(H)",'H');
JMenuItem ji23=new JMenuItem("关于记事本(A)",'A');
JScrollPane jsp=new JScrollPane();
JTextArea Txt=new JTextArea();
Font textFont=new Font("宋体",Font.PLAIN,12);
UndoManager undo = new UndoManager();
public MyTxt(){
savesearch="";
status.setLayout(new FlowLayout(FlowLayout.LEFT));
isNewText=false;
cb=t.getSystemClipboard();
jm1.setMnemonic('F');
jm2.setMnemonic('E');
jm3.setMnemonic('O');
jm4.setMnemonic('V');
jm5.setMnemonic('H');
ji1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
ji1.addActionListener(this);
jm1.add(ji1);
ji2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
ji2.addActionListener(this);
jm1.add(ji2);
ji3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
ji3.addActionListener(this);
jm1.add(ji3);
ji4.addActionListener(this);
jm1.add(ji4);
jm1.addSeparator();
ji5.addActionListener(this);
jm1.add(ji5);
ji6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
ji6.addActionListener(this);
jm1.add(ji6);
jm1.addSeparator();
ji7.addActionListener(this);
jm1.add(ji7);
ji8.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK));
ji8.addActionListener(this);
ji8.setEnabled(false);
ji9.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));
ji9.addActionListener(this);
ji9.setEnabled(false);
ji10.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
ji10.addActionListener(this);
ji10.setEnabled(false);
ji11.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
ji11.addActionListener(this);
ji12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
ji12.addActionListener(this);
ji12.setEnabled(false);
ji13.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK));
ji13.addActionListener(this);
ji14.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0));
ji14.addActionListener(this);
ji15.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK));
ji15.addActionListener(this);
ji16.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,InputEvent.CTRL_MASK));
ji16.setEnabled(false);
ji17.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
ji17.addActionListener(this);
ji18.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));
ji18.addActionListener(this);
jm2.add(ji8);
jm2.addSeparator();
jm2.add(ji9);
jm2.add(ji10);
jm2.add(ji11);
jm2.add(ji12);
jm2.addSeparator();
jm2.add(ji13);
jm2.add(ji14);
jm2.add(ji15);
jm2.add(ji16);
jm2.addSeparator();
jm2.add(ji17);
jm2.add(ji18);
ji19.setState(true);
Txt.setWrapStyleWord(true);
ji19.setMnemonic('W');
ji19.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
if(ji19.getState()){
//jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
Txt.setLineWrap(true);
//这里不用再设滚动了,因为Txt.setLineWrap已经弄了
}
else{
//jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
Txt.setLineWrap(false);
}
}
});
ji20.addActionListener(this);
jm3.add(ji19);
jm3.addSeparator();
jm3.add(ji20);
ji21.setMnemonic('S');
status.add(statuslabel);
ji21.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
if(ji21.getState())
status.setVisible(true);
else
status.setVisible(false);
}
});
status.setVisible(true);
jm4.add(ji21);
ji21.setSelected(true);
ji22.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
ji22.addActionListener(this);
ji23.addActionListener(this);
jm5.add(ji22);
jm5.addSeparator();
jm5.add(ji23);
jmb.add(jm1);
jmb.add(jm2);
jmb.add(jm3);
jmb.add(jm4);
jmb.add(jm5);
Txt.addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e)
{
checkForTriggerEvent(e);
}
public void mouseReleased(MouseEvent e)
{
checkForTriggerEvent(e);
}
private void checkForTriggerEvent(MouseEvent e)
{
if(/*e.isPopupTrigger()*/e.getButton()==MouseEvent.BUTTON3)
jpm.show(e.getComponent(), e.getX(), e.getY());
checkMenuItemEnabled(); //设置剪切、复制、粘贴、删除等功能的可用性
}//偷来的...但是有点局限性,当双击的时候会选择文本,但是
});
Txt.setFont(textFont);
Txt.setLineWrap(true);
Txt.getDocument().addUndoableEditListener(new UndoableEditListener(){
public void undoableEditHappened(UndoableEditEvent e){
undo.addEdit(e.getEdit());
}
});//使用他可以知道之情所做的是什么操作,然后返回给undo,让undo.undo使用
Txt.getDocument().addDocumentListener(new DocumentListener(){
public void changedUpdate(DocumentEvent e){
ji8.setEnabled(true);
jp_Undo.setEnabled(true);
}
public void insertUpdate(DocumentEvent e){
ji8.setEnabled(true);
jp_Undo.setEnabled(true);
}
public void removeUpdate(DocumentEvent e){
ji8.setEnabled(true);
jp_Undo.setEnabled(true);
}
});//写这个监听可以确定撤销是否可用
jsp.getViewport().add(Txt);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jp_Undo.addActionListener(this);
jp_Cut.addActionListener(this);
jp_Copy.addActionListener(this);
jp_Parst.addActionListener(this);
jp_Del.addActionListener(this);
jp_SelectAll.addActionListener(this);
jp_Undo.setEnabled(false);
jp_Cut.setEnabled(false);
jp_Copy.setEnabled(false);
jp_Parst.setEnabled(false);
jp_Del.setEnabled(false);
jpm.add(jp_Undo);
jpm.addSeparator();
jpm.add(jp_Cut);
jpm.add(jp_Copy);
jpm.add(jp_Parst);
jpm.add(jp_Del);
jpm.addSeparator();
jpm.add(jp_SelectAll);
this.setTitle("罗识识的记事本");
this.setJMenuBar(jmb);
this.add(jpm);
this.add(jsp,BorderLayout.CENTER);
this.add(status,BorderLayout.SOUTH);
this.setSize(800,600);
this.setLocation(120,90);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
mexit();
}
});
//对于JFrame如果没有添加上面这句话也可以退出,但是实际上进程并没有退出......javaw.exe存在
this.setVisible(true);
checkMenuItemEnabled();
Txt.requestFocus();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch(Exception e) {
}
new MyTxt();
}
class MyFileFilter extends FileFilter{
String strFilter;
String strDescription;
public MyFileFilter(){
this.strDescription="我的所有文件";
this.strFilter="";//设置为空,代表的意思就是所有文件
}
public MyFileFilter(String strFilter,String strDescription){
this.strFilter=strFilter;
this.strDescription=strDescription;
}
public String getDescription(){
return strDescription;
}
public boolean accept(File f){
String fileName=f.getAbsolutePath();
if(f.isDirectory())return true;
if(fileName.toUpperCase().endsWith(strFilter.toUpperCase()))
return true;
else
return false;
}
}
public void mexit(){
if(!OldText.equals(Txt.getText())){
int result=JOptionPane.showConfirmDialog(MyTxt.this, "文件未保存,是否要保存??","文件是否保存?",JOptionPane.YES_NO_CANCEL_OPTION);
if(result==JOptionPane.YES_OPTION){
JFileChooser jfc=new JFileChooser();
jfc.setDialogTitle("保存文件");
//jfc.changeToParentDirectory();
jfc.setApproveButtonText("保存");
jfc.addChoosableFileFilter(new MyFileFilter(".txt","txt文本文件"));
jfc.addChoosableFileFilter(new MyFileFilter(".java","java文本文件"));
jfc.setFileFilter(new MyFileFilter());
if(jfc.showSaveDialog(MyTxt.this)==JFileChooser.APPROVE_OPTION){
File ft=jfc.getSelectedFile();
if(true){
//if(jfc.getSelectedFile().getName().toUpperCase().endsWith(".txt".toUpperCase())){
try{
FileWriter f=new FileWriter(ft);//用于实现字符流
BufferedWriter fs=new BufferedWriter(f);
fs.write(Txt.getText(),0,Txt.getText().length());
fs.flush();
fs.close();
System.exit(0);
}catch(FileNotFoundException ex){
JOptionPane.showMessageDialog(null, "文件未找到!!");
return;
}catch(IOException ey){
JOptionPane.showMessageDialog(null, "保存出错");
return;
}
}
else{
JOptionPane.showMessageDialog(jfc, "请正确输入文件名,文件未保存!!!");
}
}
}
else if(result==JOptionPane.NO_OPTION){
System.exit(0);
}
}
else{
System.exit(0);
}
}
class MyFontDialog implements ListSelectionListener{
JTextField simple;
int index;
Font fontSimple;
String font;
String style;
String size;
int style1;
JDialog fontDialog=new JDialog(MyTxt.this,"字体设置",true);
JPanel fontsimple=new JPanel();
JLabel fontNames=new JLabel("字体(F):");
JLabel fontStyle=new JLabel("字形(Y):");
JLabel fontSize=new JLabel("大小(S):");
JTextField fontNamesText=new JTextField(15);
JTextField fontStyleText=new JTextField(10);
JTextField fontSizeText=new JTextField(10);
JList fontNamesScroll=new JList();
JList fontStyleScroll=new JList();
JList fontSizeScroll=new JList();
JButton right=new JButton("确定");
JButton cancel=new JButton("取消");
JScrollPane namesScroll=new JScrollPane(fontNamesScroll);
JScrollPane styleScroll=new JScrollPane(fontStyleScroll);
JScrollPane sizeScroll=new JScrollPane(fontSizeScroll);
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
String [] fontAllNames;
String[] fontStyleList={"常规","斜体","粗体","粗斜体"};
String[] fontSizeList={"8","9","10","12","14","18","20","36"};
public MyFontDialog(final JTextArea mt){
index=0;
fontNames.setDisplayedMnemonic('F');
fontStyle.setDisplayedMnemonic('Y');
fontSize.setDisplayedMnemonic('S');
Container con=fontDialog.getContentPane();
con.setLayout(null);
font=mt.getFont().getFontName();
fontNamesText.setText(font);
if(mt.getFont().getStyle()==Font.PLAIN){
style="常规";
}
else if(mt.getFont().getStyle()==Font.BOLD){
style="粗体";
}
else if(mt.getFont().getStyle()==Font.ITALIC){
style="斜体";
}
else{
style="粗斜体";
}
fontStyleText.setText(style);
size=Integer.valueOf(mt.getFont().getSize()).toString();
fontSizeText.setText(size);
fontNames.setBounds(10,5,140,20);
fontStyle.setBounds(155,5,120,20);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -