//包含功能:新建,打开,保存,复制,粘贴,查找,替换,版权信息等
package java_test; import java.awt.BorderLayout; import java.awt.Container; import java.awt.FileDialog; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.JButton; import javax.swing.JDialog; 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.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; /** * 记事本 * @author D_xiao * */ public class Test extends JFrame { int start=0;//查找开始位置 int end=0;//查找结束位置 JFrame jf = new JFrame(); File f; FileDialog open = new FileDialog(jf,"打开",FileDialog.LOAD); FileDialog save = new FileDialog(jf,"保存",FileDialog.SAVE); JTextArea jta = new JTextArea(); JPanel pUp = new JPanel(); JScrollPane jp = new JScrollPane(jta);//新建一个滚动条界面,将文本框传入 JMenuBar nm = new JMenuBar(); JMenu m1 = new JMenu("文件"); JMenu m2 = new JMenu("编辑"); JMenu m3 = new JMenu("帮助"); JMenuItem m11 = new JMenuItem("新建"); JMenuItem m12 = new JMenuItem("打开"); JMenuItem m13 = new JMenuItem("另存为"); JMenuItem m14 = new JMenuItem("退出"); JMenuItem m21 = new JMenuItem("复制"); JMenuItem m22 = new JMenuItem("粘贴"); JMenuItem m23 = new JMenuItem("查找"); JMenuItem m24 = new JMenuItem("替换"); JMenuItem m31 = new JMenuItem("关于"); Container c; Clipboard clipboard = getToolkit().getSystemClipboard(); private void init(){ c=this.getContentPane(); c.setLayout(new BorderLayout()); c.add(jp,BorderLayout.CENTER); c.add(nm,BorderLayout.NORTH); nm.add(m1);nm.add(m2);nm.add(m3); m1.add(m11);m1.add(m12);m1.add(m13);m1.add(m14); m2.add(m21);m2.add(m22);m2.add(m23);m2.add(m24); m3.add(m31); //新建 m11.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ Test xinjian = new Test("新建文本"); }}); //打开 m12.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ open.setVisible(true); String path = open.getDirectory(); String fileName = open.getFile(); if(path == null||fileName == null) return; jta.setText(""); File file = new File(path,fileName); try{ BufferedReader buf = new BufferedReader(new FileReader(file)); String line = null; while ((line=buf.readLine()) !=null){ jta.append(line +"\r\n"); setTitle(fileName); } buf.close(); }catch(IOException io){ throw new RuntimeException("读取失败"); } }}); //另存为 m13.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ save.setVisible(true); String path = save.getDirectory(); String fileName = save.getFile(); if(path == null || fileName == null) return; f = new File(path,fileName); try { BufferedWriter bufw = new BufferedWriter(new FileWriter(f)); String text = jta.getText(); bufw.write(text); bufw.close(); } catch (IOException e) { e.printStackTrace(); } }}); m14.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ System.exit(0); }}); //复制 m21.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ //拖动选取文本 String temp = jta.getSelectedText(); //把获取的内容复制到连续字符器,这个类继承了剪贴板接口 StringSelection text = new StringSelection(temp); //把内容放在剪贴板 clipboard.setContents(text,null); }}); //粘贴 m22.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ //Transferable接口,把剪贴板的内容转换成数据 Transferable contents = clipboard.getContents(this); //DataFalvor类判断是否能把剪贴板的内容转换成所需数据类型 DataFlavor flavor = DataFlavor.stringFlavor; //如果可以转换 if(contents.isDataFlavorSupported(flavor)){ String str; try {//开始转换 str=(String)contents.getTransferData(flavor); //如果要粘贴时,鼠标已经选中了一些字符 if(jta.getSelectedText()!=null){ //定位被选中字符的开始位置 int start = jta.getSelectionStart(); //定位被选中字符的末尾位置 int end = jta.getSelectionEnd(); //把粘贴的内容替换成被选中的内容 jta.replaceRange(str, start, end); }else{ //获取鼠标所在TextArea的位置 int mouse = jta.getCaretPosition(); //在鼠标所在的位置粘贴内容 jta.insert(str, mouse); } } catch(UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch(IllegalArgumentException e){ e.printStackTrace(); } } }}); //查找 m23.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ final JDialog search=new JDialog(); JPanel jp = new JPanel(); JLabel lb1 = new JLabel("查找内容:"); final JTextField jtf = new JTextField(10); JButton jbu = new JButton("查找下一个"); JButton jbu2 = new JButton("取消"); jp.add(lb1);jp.add(jtf);jp.add(jbu);jp.add(jbu2); search.add(jp); search.setSize(300, 200); search.setLocation(450,350); search.setVisible(true); search.setTitle("查找"); jbu.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ String findText=jtf.getText();//查找的字符串 String textArea=jta.getText();//当前文本框的内容 start=textArea.indexOf(findText,end); end=start+findText.length(); if(start==-1) { //没有找到 JOptionPane.showMessageDialog(null,"没找到"+findText,"记事本",JOptionPane.WARNING_MESSAGE); jta.select(start, end); }else{ jta.select(start,end); } }}); jbu2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ search.dispose(); } }); }}); //替换 m24.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ final JDialog search=new JDialog(); JPanel jp = new JPanel(); JLabel lb1 = new JLabel("查找内容:"); JLabel lb2 = new JLabel("替换为:"); final JTextField jtf = new JTextField(10); final JTextField jtf2 = new JTextField(10); JButton jbu = new JButton("替换"); JButton jbu2 = new JButton("取消"); JButton jbu3 = new JButton("查找下一个"); jp.add(lb1);jp.add(jtf);jp.add(lb2);jp.add(jtf2);jp.add(jbu3);jp.add(jbu);jp.add(jbu2); search.add(jp); search.setSize(300, 200); search.setLocation(450,350); search.setVisible(true); search.setTitle("替换"); jbu3.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ String findText=jtf.getText();//查找的字符串 String textArea=jta.getText();//当前文本框的内容 start=textArea.indexOf(findText,end); end=start+findText.length(); if(start==-1) { //没有找到 JOptionPane.showMessageDialog(null,"没找到"+findText,"记事本",JOptionPane.WARNING_MESSAGE); jta.select(start, end); }else{ jta.select(start,end); } }}); jbu.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ String changeText=jtf2.getText();//替换的字符串 jta.select(start, end); jta.replaceSelection(changeText); jta.select(start, end); }}); jbu2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ search.dispose(); } }); }}); //版权信息 m31.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ javax.swing.JOptionPane.showMessageDialog(null, "版权所有@D_xiao"); }}); } public Test(String title){ super(title); init(); this.setSize(585,450); this.setVisible(true); setLocationRelativeTo(null); jta.setLineWrap(true);//自动换行,同时把横向滚动条隐去 } public static void main(String[] args) { Test chushi = new Test("记事本"); } }