package notepad; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JCheckBoxMenuItem; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JToolBar; import javax.swing.KeyStroke; import javax.swing.JButton; import javax.swing.border.LineBorder; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.undo.UndoManager; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dialog.ModalityType; import javax.swing.border.BevelBorder; import javax.swing.UIManager; import javax.swing.JTextField; import javax.swing.JScrollPane; import java.awt.Font; import java.awt.TextArea; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import javax.swing.SwingConstants; import javax.swing.JTextArea; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.awt.event.ActionEvent; import java.awt.event.InputMethodListener; import java.awt.event.InputMethodEvent; public class notepad implements ActionListener, DocumentListener{ private JFrame frame = new JFrame(); private JScrollPane scrollPane = new JScrollPane(); private JTextArea textArea = new JTextArea(); private JMenu filemenu = new JMenu("æä»¶"); private JMenuItem f_new = new JMenuItem("æ°å»º"); private JMenuItem f_open = new JMenuItem("æå¼"); private JMenuItem f_save = new JMenuItem("ä¿å"); private JMenuItem f_saveas = new JMenuItem("å¦å为"); private JMenuItem f_exit = new JMenuItem("éåº"); private JMenu editmenu = new JMenu("ç¼è¾"); private JMenuItem e_undo = new JMenuItem("æ¤é"); private JMenuItem e_redo = new JMenuItem("éå"); private JMenuItem e_copy = new JMenuItem("å¤å¶"); private JMenuItem e_cut = new JMenuItem("åªå"); private JMenuItem e_paste = new JMenuItem("ç²è´´"); private JMenuItem e_selectall = new JMenuItem("å ¨é"); private JMenuItem e_find = new JMenuItem("æ¥æ¾"); private JMenuItem e_replace = new JMenuItem("æ¿æ¢"); private JMenuItem e_jump = new JMenuItem("转å°"); private JMenu format = new JMenu("æ ¼å¼"); private JMenuItem f_font = new JMenuItem("åä½..."); private JMenuItem f_color = new JMenuItem("é¢è²..."); private JMenu view = new JMenu("æ¥ç"); private JMenu help = new JMenu("帮å©"); private JMenuItem h_help = new JMenuItem("帮å©ä¸»é¢"); private JMenuItem h_about = new JMenuItem("å ³äºæçè®°äºæ¬"); private JFileChooser fc = new JFileChooser("C:\\Users\\ming\\Desktop"); private File file; private boolean saveflag = true; private UndoManager undoManager = new UndoManager(); private Clipboard clipboard; private findJDialog fj; private replaceJDialog rj; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { notepad window = new notepad(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the application. */ public notepad() { initialize(); } /** * Initialize the contents of the frame. */ private void initialize() { frame.setBounds(100, 100, 946, 617); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null); frame.setLocationRelativeTo(null); //å± ä¸ scrollPane.setBounds(0, 0, 928, 544); frame.getContentPane().add(scrollPane); scrollPane.setViewportView(textArea); JMenuBar menuBar = new JMenuBar(); frame.setJMenuBar(menuBar); menuBar.add(filemenu); filemenu.add(f_new); filemenu.add(f_open); filemenu.add(f_save); filemenu.add(f_saveas); filemenu.insertSeparator(4); //åé线 filemenu.add(f_exit); menuBar.add(editmenu); editmenu.add(e_undo); editmenu.add(e_redo); editmenu.add(e_copy); editmenu.add(e_cut); editmenu.add(e_paste); editmenu.add(e_selectall); editmenu.add(e_find); editmenu.add(e_replace); editmenu.add(e_jump); menuBar.add(format); JCheckBoxMenuItem f_wordwrap = new JCheckBoxMenuItem("èªå¨æ¢è¡"); format.add(f_wordwrap); format.add(f_font); format.add(f_color); menuBar.add(view); menuBar.add(help); help.add(h_help); help.add(h_about); f_save.setEnabled(false); f_saveas.setEnabled(false); clipboard = frame.getToolkit().getSystemClipboard(); h_about.addActionListener(this); f_open.addActionListener(this); f_save.addActionListener(this); f_new.addActionListener(this); f_saveas.addActionListener(this); f_exit.addActionListener(this); textArea.getDocument().addDocumentListener(this); textArea.getDocument().addUndoableEditListener(undoManager); e_undo.addActionListener(this); e_redo.addActionListener(this); e_copy.addActionListener(this); e_paste.addActionListener(this); e_cut.addActionListener(this); e_selectall.addActionListener(this); e_find.addActionListener(this); e_replace.addActionListener(this); e_jump.addActionListener(this); e_undo.setAccelerator(KeyStroke.getKeyStroke('Z',InputEvent.CTRL_MASK)); e_redo.setAccelerator(KeyStroke.getKeyStroke('Y',InputEvent.CTRL_MASK)); e_copy.setAccelerator(KeyStroke.getKeyStroke('C',InputEvent.CTRL_MASK)); e_cut.setAccelerator(KeyStroke.getKeyStroke('X',InputEvent.CTRL_MASK)); e_paste.setAccelerator(KeyStroke.getKeyStroke('V',InputEvent.CTRL_MASK)); e_selectall.setAccelerator(KeyStroke.getKeyStroke('A',InputEvent.CTRL_MASK)); e_find.setAccelerator(KeyStroke.getKeyStroke('F',InputEvent.CTRL_MASK)); e_replace.setAccelerator(KeyStroke.getKeyStroke('H',InputEvent.CTRL_MASK)); e_jump.setAccelerator(KeyStroke.getKeyStroke('J',InputEvent.CTRL_MASK)); f_new.setAccelerator(KeyStroke.getKeyStroke('N',InputEvent.CTRL_MASK)); f_open.setAccelerator(KeyStroke.getKeyStroke('O',InputEvent.CTRL_MASK)); f_save.setAccelerator(KeyStroke.getKeyStroke('S',InputEvent.CTRL_MASK)); f_saveas.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK, true)); f_exit.setAccelerator(KeyStroke.getKeyStroke('D', InputEvent.CTRL_MASK)); textArea.setText(""); file = null; textArea.setVisible(true); f_save.setEnabled(true); f_saveas.setEnabled(true); textArea.grabFocus(); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String cmd = e.getActionCommand(); if("æ°å»º".equals(cmd)) { textArea.setText(""); file = null; textArea.setVisible(true); f_save.setEnabled(true); f_saveas.setEnabled(true); textArea.grabFocus(); } if("å ³äºæçè®°äºæ¬".equals(cmd)) { JOptionPane.showMessageDialog(null, "èåæµè¯", "å ³äº", 0); } if("æå¼".equals(cmd)){ int returanVal = fc.showOpenDialog(null); if(returanVal == JFileChooser.APPROVE_OPTION) { file = fc.getSelectedFile(); try { textArea.setVisible(true); textArea.setText(""); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); String s; try { while((s = br.readLine()) != null) { textArea.append(s); textArea.append("\n"); } br.close(); fr.close(); f_save.setEnabled(true); f_saveas.setEnabled(true); } catch (IOException e1) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null, "æä»¶è¯»ååºé", "é误", 0); } } catch (FileNotFoundException e1) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null, "æä»¶æå¼åºé", "é误", 0); } } //è·åå æ } if("ä¿å".equals(cmd)) { if(file == null) { int flag = fc.showSaveDialog(null); if (flag == JFileChooser.APPROVE_OPTION) { file = fc.getSelectedFile(); } System.out.println("ctrl sdfsf"); } try { String s = textArea.getText(); FileWriter fw = new FileWriter(file); try { fw.write(s); fw.flush(); fw.close(); } catch (IOException e1) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null, "æä»¶åå ¥åºé", "é误", 0); } } catch (Exception e1) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null, "æä»¶ä¿ååºé", "é误", 0); } saveflag = true; } if("å¦å为".equals(cmd)) { file = null; if(file == null) { int flag = fc.showSaveDialog(null); if (flag == JFileChooser.APPROVE_OPTION) { file = fc.getSelectedFile(); } } try { String s = textArea.getText(); FileWriter fw = new FileWriter(file); try { fw.write(s); fw.flush(); fw.close(); } catch (IOException e1) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null, "æä»¶åå ¥åºé", "é误", 0); } } catch (Exception e1) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null, "æä»¶ä¿ååºé", "é误", 0); } saveflag = true; } if("éåº".equals(cmd)) { if(saveflag == false) { int n = JOptionPane.showConfirmDialog(null, "ä½ è¦ä¿åå"); if(n == 0) { try { String s = textArea.getText(); FileWriter fw = new FileWriter(file); try { fw.write(s); fw.flush(); fw.close(); } catch (IOException e1) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null, "æä»¶åå ¥åºé", "é误", 0); } } catch (Exception e1) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null, "æä»¶ä¿ååºé", "é误", 0); } } } System.exit(0); } if("æ¤é".equals(cmd)) { if (undoManager.canUndo()) { undoManager.undo(); } } if("éå".equals(cmd)) { if (undoManager.canRedo()) { undoManager.redo(); } } if("åªå".equals(cmd)) { String tempText = textArea.getSelectedText(); StringSelection editText = new StringSelection(tempText); clipboard.setContents(editText,null); int start= textArea.getSelectionStart(); int end = textArea.getSelectionEnd(); textArea.replaceRange("",start,end) ; } if("å¤å¶".equals(cmd)) { String tempText = textArea.getSelectedText(); StringSelection editText = new StringSelection(tempText); clipboard.setContents(editText,null); } if("ç²è´´".equals(cmd)) { Transferable contents = clipboard.getContents(this); DataFlavor flavor= DataFlavor.stringFlavor; if( contents.isDataFlavorSupported(flavor)){ try { String str; str = (String)contents.getTransferData(flavor); textArea.append(str); }catch(Exception ex) { ex.printStackTrace(); } } } if("å ¨é".equals(cmd)) { textArea.selectAll(); } if("æ¥æ¾".equals(cmd)) { /* * å¤ææ¥æ¾çªå£æ¯å¦æå¼ * å¦æå·²ç»æå¼äºå°±æ²¡æå¿ è¦åå建ä¸ä¸ªç±»äº */ if(fj.getisopen() == false) { fj = new findJDialog(textArea); fj.setVisible(true); fj.setLocationRelativeTo(null); } } if("æ¿æ¢".equals(cmd)) { /* * å¤ææ¥æ¾çªå£æ¯å¦æå¼ * å¦æå·²ç»æå¼äºå°±æ²¡æå¿ è¦åå建ä¸ä¸ªç±»äº */ if(rj.getisopen() == false) { rj = new replaceJDialog(); rj.setVisible(true); rj.setLocationRelativeTo(null); } } } @Override public void changedUpdate(DocumentEvent arg0) { // TODO Auto-generated method stub if(saveflag) { saveflag = false; } } @Override public void insertUpdate(DocumentEvent arg0) { // TODO Auto-generated method stub if(saveflag) { saveflag = false; } } @Override public void removeUpdate(DocumentEvent arg0) { // TODO Auto-generated method stub if(saveflag) { saveflag = false; } } }