swing写的记事本 package com.guozhiqiang; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; 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 javax.swing.BorderFactory; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; public class NotePad extends JFrame{ private JMenu editeMenu; private JMenuItem menuOpen; private JMenuItem menuSave; private JMenuItem menuSaveAs; private JMenuItem menuClose; private JMenuItem menuCut; private JMenuItem menuCopy; private JMenuItem menuPaste; private JMenuItem menuAbout; private JTextArea textArea; private JPopupMenu popUpMenu; private JLabel stateBar; private JFileChooser fileChooser = new JFileChooser(); public NotePad(){ super("新建文本文件"); setUIComponent(); setEventListen(); setVisible(true); } public void setEventListen(){ //关闭监听 addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ closeFile(); } }); menuOpen.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ openFile(); } }); menuSave.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ saveFile(); } } ); menuSaveAs.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ saveFileAs(); } }); menuClose.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ closeFile(); } }); menuCut.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ cut(); } }); menuCopy.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ copy(); } }); menuPaste.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ paste(); } }); textArea.addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ processTextArea(); } }); textArea.addMouseListener(new MouseAdapter(){ public void mouseReleased(MouseEvent e){ if(e.getButton()==MouseEvent.BUTTON3){ popUpMenu.show(editeMenu,e.getX(),e.getY()); } } public void mouseClicked(MouseEvent e){ if(e.getButton()==MouseEvent.BUTTON1){ popUpMenu.setVisible(false); } } }); } public void setUIComponent(){ setSize(640,480); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("文件"); menuOpen = new JMenuItem("打开"); menuOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_0,InputEvent.CTRL_MASK)); menuSave = new JMenuItem("保存"); menuSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); menuSaveAs = new JMenuItem("另保存"); menuClose = new JMenuItem("关闭"); menuClose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK)); fileMenu.add(menuOpen); fileMenu.addSeparator(); fileMenu.add(menuSave); fileMenu.add(menuSaveAs); fileMenu.addSeparator(); fileMenu.add(menuClose); editeMenu = new JMenu("编辑"); menuCut = new JMenuItem("剪切"); menuCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); menuCopy = new JMenuItem("复制"); menuCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); menuPaste = new JMenuItem("粘贴"); menuPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK)); editeMenu.add(menuCut); editeMenu.add(menuCopy); editeMenu.add(menuPaste); JMenu aboutMenu = new JMenu("关于"); menuAbout = new JMenuItem("关于JNotePad"); aboutMenu.add(menuAbout); menuBar.add(fileMenu); menuBar.add(editeMenu); menuBar.add(aboutMenu); setJMenuBar(menuBar); /*****************************************/ textArea= new JTextArea(); textArea.setFont(new Font(" 宋体",Font.PLAIN,16)); ///??? textArea.setLineWrap(true); JScrollPane panel = new JScrollPane(textArea,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); Container contentPane = getContentPane(); contentPane.add(panel,BorderLayout.CENTER); stateBar = new JLabel("未修改"); stateBar.setHorizontalAlignment(SwingConstants.LEFT); stateBar.setBorder(BorderFactory.createEtchedBorder()); contentPane.add(stateBar,BorderLayout.SOUTH); popUpMenu = editeMenu.getPopupMenu(); } private void openFile(){ if(isCurrentFiledSaved()){ open(); }else{ int option = JOptionPane.showConfirmDialog(null,"文件已修改,是否保存","保存文件?",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE,null); switch(option){ case JOptionPane.YES_OPTION: saveFile(); break; case JOptionPane.NO_OPTION: open(); break; } } } private void open(){ int option =fileChooser.showDialog(null,null); if(option == JFileChooser.APPROVE_OPTION){ try { BufferedReader buf = new BufferedReader(new FileReader(fileChooser.getSelectedFile())); setTitle(fileChooser.getSelectedFile().toString()); textArea.setText(""); stateBar.setText("未修改"); String lineSeparator = System.getProperty("LINE.separator"); String text ; while((text=buf.readLine())!= null){ textArea.append(text); textArea.append(lineSeparator); } buf.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private boolean isCurrentFiledSaved(){ if(stateBar.getText().equals("未修改")){ return false; }else{ return true; } } private void saveFile(){ File file = new File(getTitle()); if(!file.exists()){ saveFileAs(); }else{ try { BufferedWriter buf = new BufferedWriter(new FileWriter(file)); buf.write(textArea.getText()); buf.close(); stateBar.setText("未修改"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private void saveFileAs(){ int option = fileChooser.showDialog(null,null); if(option == JFileChooser.APPROVE_OPTION){ File file = fileChooser.getSelectedFile(); setTitle(file.toString()); try { file.createNewFile(); saveFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private void closeFile(){ if(isCurrentFiledSaved()){ dispose(); }else{ int option = JOptionPane.showConfirmDialog(null,"文件已经修改是否保存?","保存文件",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE,null); switch(option){ case JOptionPane.YES_OPTION: saveFile(); break; case JOptionPane.NO_OPTION: dispose(); } } } private void cut(){ textArea.cut(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void copy(){ textArea.copy(); popUpMenu.setVisible(false); } private void paste(){ textArea.paste(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void processTextArea(){ stateBar.setText("已修改"); } public static void main(String[] str){ new NotePad(); } }