⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minieditor.java

📁 记事本 编译四个源文件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 

import javax.swing.*; 
import javax.swing.event.*; 
import javax.swing.text.*; 
import javax.swing.undo.*; 

public class MiniEditor extends JFrame implements ActionListener, 
CaretListener, 
DocumentListener, 
KeyListener 
{ 
JMenuItem menuFileNew, menuFileOpen, menuFileClose,menuFileSave, menuFileSaveAs,menuFilePrint, menuFilePrintSetup,menuFileExit, 
menuEditUndo, menuEditRedo,menuEditCut, menuEditCopy, menuEditPaste,menuEditDeleteSelection, menuEditDeleteLine, menuEditDeleteWord, 
menuEditFind, menuEditReplace, menuEditGoTo, menuEditSelectAll, 
menuViewFont, menuViewColor,menuViewDoubleSpace, 
menuHelpAbout; 
JCheckBoxMenuItem menuViewClassic, menuViewStatus, menuViewWordWrap; 
PrintableTextArea ta; 
TextField tfs, tfro, tfrn; 
Label fileStatus, statusRow, statusCol, statusMode, statusSize; 
Button bs, brf, brr, brra; 
JFrame fr; 
JDialog dl; 
String fns; 
Color defaultForeground, defaultBackground, defaultCaretColor; 
Font defaultFont = new Font("Courier", Font.PLAIN,12); 
Checkbox dsLoop, dsMatchCase, drMatchCase; 
JLabel dsMessage2; 

protected UndoManager undo = new UndoManager(); 
protected UndoableEditListener undoHandler = new UndoHandler(); 

static int foundCount = 0; 
int FindStartPos = 0; 
boolean findingLoop = true; 
boolean beginTextListener, isNewFile; 
boolean INSERTMODE = true; 
boolean BACKSPACE = false; 

public static void main(String[] args){ 
try { 
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); 
//UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); 
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
} catch(Exception e) { 
} 
//Locale.setDefault(Locale.CHINA); 
//Locale.setDefault(new Locale("zh", "CN")); 
MiniEditor me = new MiniEditor(); 
me.windowLayout(); 
} 

public void windowLayout(){ 
JFrame fr = new JFrame("MiniEditor"); 
fr.getContentPane().setLayout(new BorderLayout(5, 5)); 
JPanel p = new JPanel(); 
fileStatus = new Label("file status: "); 
statusRow = new Label("row: "); 
statusCol = new Label("col: "); 
statusMode = new Label("mode: "); 
statusSize = new Label("size: "); 
ta = new PrintableTextArea(20, 50); 
ta.setCursor(new Cursor(Cursor.HAND_CURSOR)); 
ta.setFont(defaultFont); 
defaultForeground = ta.getForeground(); 
defaultBackground = ta.getBackground(); 
defaultCaretColor = ta.getCaretColor(); 
ta.setWrapStyleWord(true); 
ta.getDocument().addDocumentListener(this); 
ta.addCaretListener(this); 
ta.addKeyListener(this); 
ta.getDocument().addUndoableEditListener(undoHandler); 
JScrollPane scroller = new JScrollPane(); 
JViewport port = scroller.getViewport(); 
port.add(ta); 
fr.getContentPane().add("Center",scroller); 
fr.getContentPane().add("South",p); 
p.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); 
p.add(fileStatus); 
p.add(statusRow); 
p.add(statusCol); 
p.add(statusMode); 
p.add(statusSize); 

JMenuBar mb = new JMenuBar(); 

JMenu menuFile = new JMenu("File", true); 
//menuFile.setMnemonic(′F′); 

menuFileNew = new JMenuItem("New", ′N′); 
menuFileNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK)); 
menuFileNew.addActionListener(this); 

menuFileOpen = new JMenuItem("Open...", ′O′); 
menuFileOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); 
menuFileOpen.addActionListener(this); 

menuFileClose = new JMenuItem("Close", ′C′); 
menuFileClose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.CTRL_MASK)); 
menuFileClose.addActionListener(this); 

menuFileSave = new JMenuItem("Save", ′S′); 
menuFileSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK)); 
menuFileSave.addActionListener(this); 


menuFileSaveAs = new JMenuItem("Save As...", ′A′); 
menuFileSaveAs.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F12, 0)); 
menuFileSaveAs.addActionListener(this); 


menuFilePrint = new JMenuItem("Print", ′P′); 
menuFilePrint.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK)); 
menuFilePrint.addActionListener(this); 
//menuFilePrint.setEnabled(false); 

//menuFilePrintSetup = new JMenuItem("Print Setup..."); 
//menuFilePrintSetup.addActionListener(this); 
//menuFilePrintSetup.setMnemonic(′u′); 
//menuFilePrintSetup.setEnabled(false); 

menuFileExit = new JMenuItem("Exit", ′x′); 
menuFileExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); 
menuFileExit.addActionListener(this); 

JMenu menuEdit = new JMenu("Edit", true); 

menuEditUndo = new JMenuItem("Undo"); 
menuEditUndo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK)); 
menuEditUndo.addActionListener(this); 
menuEditUndo.setEnabled(false); 

//menuEditRedo = new JMenuItem("Redo"); 
//menuEditRedo.addActionListener(this); 
//menuEditRedo.setEnabled(false); 

menuEditCut = new JMenuItem("Cut", ′t′); 
menuEditCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); 
menuEditCut.addActionListener(this); 

menuEditCopy = new JMenuItem("Copy", ′C′); 
menuEditCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); 
menuEditCopy.addActionListener(this); 

menuEditPaste = new JMenuItem("Paste", ′P′); 
menuEditPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); 
menuEditPaste.addActionListener(this); 

JMenu menuEditDelete = new JMenu("Delete"); 
menuEditDelete.setMnemonic(′D′); 

menuEditDeleteSelection = new JMenuItem("Selection", ′S′); 
menuEditDeleteSelection.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); 
menuEditDeleteSelection.addActionListener(this); 

menuEditDeleteLine = new JMenuItem("Line", ′L′); 
menuEditDeleteLine.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, InputEvent.CTRL_MASK)); 
menuEditDeleteLine.addActionListener(this); 

menuEditDeleteWord = new JMenuItem("Word", ′W′); 
menuEditDeleteWord.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_MASK)); 
menuEditDeleteWord.addActionListener(this); 

menuEditFind = new JMenuItem("Find...", ′F′); 
menuEditFind.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK)); 
menuEditFind.addActionListener(this); 

menuEditReplace = new JMenuItem("Replace...", ′R′); 
menuEditReplace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK)); 
menuEditReplace.addActionListener(this); 
//menuEditReplace.setEnabled(false); 

menuEditGoTo = new JMenuItem("Go To...", ′G′); 
menuEditGoTo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_MASK)); 
menuEditGoTo.addActionListener(this); 

menuEditSelectAll = new JMenuItem("Select All", ′A′); 
menuEditSelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK)); 
menuEditSelectAll.addActionListener(this); 

JMenu menuView = new JMenu("View", true); 

menuViewFont = new JMenuItem("Font...", ′F′); 
menuViewFont.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK + InputEvent.ALT_MASK)); 
menuViewFont.addActionListener(this); 

menuViewColor = new JMenuItem("Color...", ′C′); 
menuViewColor.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK + InputEvent.ALT_MASK)); 
menuViewColor.addActionListener(this); 

menuViewClassic = new JCheckBoxMenuItem("Classic"); 
menuViewClassic.setMnemonic(′l′); 
menuViewClassic.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, InputEvent.CTRL_MASK + InputEvent.ALT_MASK)); 
menuViewClassic.setState(false); 
menuViewClassic.addActionListener(this); 

menuViewStatus = new JCheckBoxMenuItem("Status"); 
menuViewStatus.setMnemonic(′S′); 
menuViewStatus.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK + InputEvent.ALT_MASK)); 
menuViewStatus.setState(true); 
menuViewStatus.addActionListener(this); 

menuViewWordWrap = new JCheckBoxMenuItem("Word Wrap"); 
menuViewWordWrap.setMnemonic(′W′); 
menuViewWordWrap.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_MASK + InputEvent.ALT_MASK)); 
menuViewWordWrap.setState(false); 
menuViewWordWrap.addActionListener(this); 

menuViewDoubleSpace = new JMenuItem("Double Space", ′D′); 
menuViewDoubleSpace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_MASK + InputEvent.ALT_MASK)); 
menuViewDoubleSpace.addActionListener(this); 

JMenu menuHelp = new JMenu("Help", true); 

menuHelpAbout = new JMenuItem("About", ′A′); 
menuHelpAbout.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0)); 
menuHelpAbout.addActionListener(this); 

fr.setJMenuBar(mb); 
mb.add(menuFile); 
menuFile.add(menuFileNew); 
menuFile.add(menuFileOpen); 
menuFile.add(menuFileClose); 
menuFile.addSeparator(); 
menuFile.add(menuFileSave); 
menuFile.add(menuFileSaveAs); 
menuFile.addSeparator(); 
menuFile.add(menuFilePrint); 
//menuFile.add(menuFilePrintSetup); 
menuFile.addSeparator(); 
menuFile.add(menuFileExit); 
mb.add(menuEdit); 
menuEdit.add(menuEditUndo); 
//menuEdit.add(menuEditRedo); 
menuEdit.addSeparator(); 
menuEdit.add(menuEditCut); 
menuEdit.add(menuEditCopy); 
menuEdit.add(menuEditPaste); 
menuEdit.add(menuEditDelete); 
menuEditDelete.add(menuEditDeleteSelection); 
menuEditDelete.add(menuEditDeleteLine); 
menuEditDelete.add(menuEditDeleteWord); 
menuEdit.addSeparator(); 
menuEdit.add(menuEditFind); 
menuEdit.add(menuEditReplace); 
menuEdit.add(menuEditGoTo); 
menuEdit.addSeparator(); 
menuEdit.add(menuEditSelectAll); 
mb.add(menuView); 
menuView.add(menuViewFont); 
menuView.add(menuViewColor); 
menuView.addSeparator(); 
menuView.add(menuViewClassic); 
menuView.add(menuViewStatus); 
menuView.add(menuViewWordWrap); 
menuView.addSeparator(); 
menuView.add(menuViewDoubleSpace); 
mb.add(menuHelp); 
menuHelp.add(menuHelpAbout); 
fr.addWindowListener(new WindowAdapter() { 
public void windowClosing(WindowEvent e) { 
System.exit(0); 
} 
}); 
fr.setSize(600,420); 
fr.setVisible(true); 
} 

//ActionListener 
public void actionPerformed(ActionEvent ae) { 
if(ae.getSource() == menuFileNew) { 
ta.replaceRange("", 0, ta.getText().length()); 
fns = null; 
fileStatus.setText("New File"); 
undo.discardAllEdits(); 
menuEditUndo.setEnabled(false); 
} 
else if(ae.getSource() == menuFileOpen) { 
String s = null; 
StringBuffer strPool = new StringBuffer(); 
Frame openFileFrame = new Frame("Open file"); 
FileDialog fileDialog = new FileDialog(openFileFrame); 
fileDialog.setMode(FileDialog.LOAD); 
fileDialog.setFile("*.txt;*.java"); 
fileDialog.show(); 
String file = fileDialog.getFile(); 
String directory = fileDialog.getDirectory(); 
if(file != null) { 
fns = directory + file; 
ta.replaceRange("", 0, ta.getText().length()); 
BufferedReader br; 
try{ 
br = new BufferedReader(new FileReader(fns)); 
s = br.readLine(); 
while(s != null) { 
strPool.append(s + ′\15′ + "\12");//+0D+0A 
s = br.readLine(); 
} 
br.close(); 
ta.setText(strPool.toString()); 
} catch(IOException e) { 
} 
fileStatus.setText("file opened."); 
isNewFile = true; 
undo.discardAllEdits(); 
menuEditUndo.setEnabled(false); 
} 
} 
else if(ae.getSource() == menuFileClose) { 
ta.replaceRange("", 0, ta.getText().length()); 
fileStatus.setText("file closed without save"); 
undo.discardAllEdits(); 
menuEditUndo.setEnabled(false); 
fns = null; 
} 
else if(ae.getSource() == menuFilePrint) { 
JOptionPane.showMessageDialog(null, "TODO... Only the FIRST page now.", "Print", 1); 
ta.printIt(ta.getText(), ta.getFont()); 
//todo... 
} 
//else if(ae.getSource() == menuFilePrintSetup) { 
//ta.printItSetup(ta.getText(), ta.getFont()); 
//todo... 
//} 
else if(ae.getSource() == menuFileSave) { 
OutputStreamWriter osw; 
if(fns != null) { 
try{ 
osw = new OutputStreamWriter( 
new BufferedOutputStream( 
new FileOutputStream(fns))); 
osw.write(ta.getText(), 0, ta.getText().length()); 
osw.close(); 
fileStatus.setText("file saved"); 
} catch(IOException e) { 
} 
if(fileStatus.getText().endsWith("*")) { 
fileStatus.setText(fileStatus.getText().substring(0, 
fileStatus.getText().length() - 1)); 
} 
} 
else { 
Frame saveFileFrame = new Frame("Save file"); 
FileDialog fileDialog = new FileDialog(saveFileFrame); 
fileDialog.setMode(FileDialog.SAVE); 
fileDialog.setFile("*.txt;*.java"); 
fileDialog.show(); 
String file = fileDialog.getFile(); 
String directory = fileDialog.getDirectory(); 
if(file != null) { 
fns = directory + file; 
try{ 
osw = new OutputStreamWriter( 
new BufferedOutputStream( 
new FileOutputStream(fns))); 
osw.write(ta.getText(), 0, ta.getText().length()); 
osw.close(); 
fileStatus.setText("file saved"); 
} catch(IOException e) { 
} 
} 
} 
} 
else if(ae.getSource() == menuFileSaveAs) { 
OutputStreamWriter osw; 
Frame saveFileFrame = new Frame("Save file"); 
FileDialog fileDialog = new FileDialog(saveFileFrame); 
fileDialog.setMode(FileDialog.SAVE); 
fileDialog.setFile("*.txt;*.java"); 
fileDialog.show(); 
String file = fileDialog.getFile(); 
String directory = fileDialog.getDirectory(); 
if(file != null) { 
fns = directory + file; 
try{ 
osw = new OutputStreamWriter( 
new BufferedOutputStream( 
new FileOutputStream(fns))); 
osw.write(ta.getText(), 0, ta.getText().length()); 
osw.close(); 
fileStatus.setText("file saved"); 
} catch(IOException e) { 
} 
} 
} 
else if(ae.getSource() == menuFileExit) { 
System.exit(0); 
} 
else if(ae.getSource() == menuEditUndo) { 
if(undo.canUndo()) { 
try { 
undo.undo(); 
} catch(CannotUndoException ex) { 
System.out.println("Unable to undo: " + ex); 
ex.printStackTrace(); 
} 
if(!undo.canUndo()) 
menuEditUndo.setEnabled(false); 
} 
//else 
// menuEditUndo.setEnabled(false); 
} 
else if(ae.getSource() == menuEditRedo) { 
//todo... 
} 
else if(ae.getSource() == menuEditCut) { 
ta.cut(); 
} 
else if(ae.getSource() == menuEditCopy) { 
ta.copy(); 
} 
else if(ae.getSource() == menuEditPaste) { 
ta.paste(); 
} 
else if(ae.getSource() == menuEditDeleteSelection) { 
ta.replaceRange("", ta.getSelectionStart(), ta.getSelectionEnd()); 
} 
else if(ae.getSource() == menuEditDeleteLine) { 
String str = ta.getText(); 
int pos = ta.getCaretPosition(); 
int lineStart = 0, lineEnd = 0; 
lineStart = str.substring(0, pos).lastIndexOf(′\12′); 
lineEnd = str.indexOf(′\15′, pos); 
lineStart = (lineStart == -1) ? 0 : (lineStart - 1); 
ta.replaceRange("", lineStart, lineEnd); 
lineStart = (lineStart == 0) ? 0 : (lineStart + 2); 
ta.setCaretPosition(lineStart); 
} 
else if(ae.getSource() == menuEditDeleteWord) { 
String str = ta.getText(); 
int pos = ta.getCaretPosition(); 
int wordStart = 0, wordEnd = 0; 
wordEnd = wordLocation(str, pos, true); 
if(wordEnd == pos) { 
wordStart = pos; 
wordEnd = pos + 1; 
ta.replaceRange("", wordStart, wordEnd); 
} 
else { 
wordStart = wordLocation(str, pos, false); 
if(wordStart == -1) 
ta.replaceRange("", 0, wordEnd); 
else 
ta.replaceRange("", wordStart, wordEnd); 
} 
} 
else if(ae.getSource() == menuEditFind) { 
JDialog ds = new JDialog(this, "Find", true); 
ds.getContentPane().setLayout(new FlowLayout()); 
ds.setResizable(false); 
tfs = new TextField(15); 
ds.getContentPane().add(tfs); 
bs = new Button("Find"); 
bs.addActionListener(this); 
Button bsc = new Button("Cancel"); 
bsc.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent bOke) { 
dispose(); 
foundCount = 0; 
} 
}); 
ds.getContentPane().add(bs); 
ds.getContentPane().add(bsc); 
JLabel dsMessage1 = new JLabel("Found counts: "); 
dsMessage2 = new JLabel(" 0"); 
dsLoop = new Checkbox("Loop"); 
dsLoop.setState(findingLoop); 
dsMatchCase = new Checkbox("Match Case"); 
ds.getContentPane().add(dsLoop); 
ds.getContentPane().add(dsMatchCase); 
ds.getContentPane().add(dsMessage1); 
ds.getContentPane().add(dsMessage2); 
ds.setLocation(120, 120); 
ds.addWindowListener(new WindowAdapter() { 
public void windowClosing(WindowEvent e) { 
dispose(); 
FindStartPos = 0; 
} 
}); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -