最近java课程设计写一个文本编辑器,恰巧前几天刚刚看了一下io编程,所以自己动手写了一个,不完美,而且自我感觉代码有点乱,也希望大家指正。
1、具有菜单功能,包括如下菜单:
文件:新建、打开、保存、退出
编辑:复制、粘贴、查找、替换
帮助:关于
2、刚运行时默认是新建状态,标题栏可以显示为“新建文本文件”,可以直接在文本区(JTextArea)中输入文字内容,单击保存菜单时要做判断是否保存过,如果还没有保存过则提示输入文件名,然后保存为用户输入的文件名,同时窗口的标题栏显示为该文件名;如果不是第一次保存,即已经保存过一次,则直接保存到原来的文件名,标题栏仍然显示为原来的文件名。
3、单击打开菜单时,弹出打开文件对话框,要用户选择一个文本文件,然后把文件内容读取并显示到文本编辑区(用JTextArea实现),单击保存时,不用再提示输入文件名,直接保存到原来的打开时的文件名,文件名要显示到标题栏(同时文件名应该保存到属性变量中)
4、单击保存菜单时,要判断是否是第一次新建或默认运行时的状态,如果是,则提示输入文件名,然后保存到文件中去;否则,直接保存到原来的文件名里即可。
5、单击退出菜单,直接退出系统。
6、单击复制菜单时,将选中的文本复制到粘贴板。
7、单击粘贴菜单时,将粘贴板中的内容复制到光标所在的文本位置。
8、单击查找菜单时,提示输入要查找的内容,并把查找到的内容选中。
9、单击替换菜单时,提示输入要替换成的内容,并进行替换(只替换第一个找到的结果即可,其他的可以多次替换来完成)
10、单击关于菜单时,显示一个作者和版权信息即可(作者是你本人)。
提示。
代码如下:
- import java.awt.BorderLayout;
- import java.awt.event.ActionListener;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.io.*;
- import javax.swing.*;
- public class Test extends JFrame implements ActionListener{
- static String filepath;
- String temp;
- static boolean flag = true;
- JPanel jp = null;
- JScrollPane jsp = null;
- static JTextArea jta = null;
- JMenuBar jmb =null;
- JMenu jm1 = null;
- JMenu jm2 = null;
- JMenu jm3 = null;
- JMenuItem jm1_jmi1 = null;
- JMenuItem jm1_jmi2 = null;
- JMenuItem jm1_jmi3 = null;
- JMenuItem jm1_jmi4 = null;
- JMenuItem jm2_jmi1 = null;
- JMenuItem jm2_jmi2 = null;
- JMenuItem jm2_jmi3 = null;
- JMenuItem jm2_jmi4 = null;
- JMenuItem jm3_jmi1 = null;
- public Test(){
- jta = new JTextArea();
- jsp = new JScrollPane(jta);
- jp = new JPanel();
- jmb = new JMenuBar();
- jm1 = new JMenu("文件");
- jm2 = new JMenu("编辑");
- jm3 = new JMenu("帮助");
- jm1_jmi1 = new JMenuItem("新建");
- jm1_jmi1.addActionListener(this);
- jm1_jmi1.setActionCommand("new");
- jm1_jmi2 = new JMenuItem("打开");
- jm1_jmi2.addActionListener(this);
- jm1_jmi2.setActionCommand("open");
- jm1_jmi3 = new JMenuItem("保存");
- jm1_jmi3.addActionListener(this);
- jm1_jmi3.setActionCommand("save");
- jm1_jmi4 = new JMenuItem("退出");
- jm1_jmi4.addActionListener(this);
- jm1_jmi4.setActionCommand("exit");
- jm2_jmi1 = new JMenuItem("复制");
- jm2_jmi1.addActionListener(this);
- jm2_jmi1.setActionCommand("copy");
- jm2_jmi2 = new JMenuItem("粘贴");
- jm2_jmi2.addActionListener(this);
- jm2_jmi2.setActionCommand("paste");
- jm2_jmi3 = new JMenuItem("查找");
- jm2_jmi3.addActionListener(this);
- jm2_jmi3.setActionCommand("find");
- jm2_jmi4 = new JMenuItem("替换");
- jm2_jmi4.addActionListener(this);
- jm2_jmi4.setActionCommand("replace");
- jm3_jmi1 = new JMenuItem("关于");
- jm3_jmi1.addActionListener(this);
- jm3_jmi1.setActionCommand("about");
- jmb.add(jm1);
- jm1.add(jm1_jmi1);
- jm1.addSeparator();
- jm1.add(jm1_jmi2);
- jm1.addSeparator();
- jm1.add(jm1_jmi3);
- jm1.addSeparator();
- jm1.add(jm1_jmi4);
- jmb.add(jm2);
- jm2.add(jm2_jmi1);
- jm2.addSeparator();
- jm2.add(jm2_jmi2);
- jm2.addSeparator();
- jm2.add(jm2_jmi3);
- jm2.addSeparator();
- jm2.add(jm2_jmi4);
- jmb.add(jm3);
- jm3.add(jm3_jmi1);
- this.setJMenuBar(jmb);
- this.add(jsp);
- this.setTitle("新建文本文档");
- this.setSize(800,600);
- this.setVisible(true);
- this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- public void actionPerformed(ActionEvent e){
- //打开按钮监听器
- if(e.getActionCommand().equals("open")){
- Open open1 = new Open();
- open1.open();
- }
- //保存按钮监听器
- //二次保存功能未实现
- if(e.getActionCommand().equals("save")){
- Save save1 = new Save();
- save1.save();
- //System.exit(0);
- }
- //退出功能
- if(e.getActionCommand().equals("exit")){
- System.exit(0);
- }
- //复制功能
- if(e.getActionCommand().equals("copy")){
- temp = jta.getSelectedText();
- }
- //粘贴功能
- if(e.getActionCommand().equals("paste")){
- StringBuffer tmp = new StringBuffer ( jta.getText());
- int start = jta.getSelectionStart(); //得到要粘贴的位置
- tmp.insert(start , temp);//查入要粘贴的内容
- jta.setText(tmp.toString());//用新文本设置原文本
- }
- //查找功能
- if(e.getActionCommand().equals("find")){
- Find find = new Find();
- find.search();
- }
- //替换功能
- if(e.getActionCommand().equals("replace")){
- Replace replace = new Replace();
- }
- //帮助选项关于功能
- if(e.getActionCommand().equals("about")){
- JOptionPane jop = new JOptionPane();
- jop.showMessageDialog(null, "杰哥版权,随便侵犯.", "给哥看准了",JOptionPane.PLAIN_MESSAGE);
- }
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Test test = new Test();
- }
- }
替换功能:
- import java.awt.BorderLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import javax.swing.*;
- public class Replace extends JFrame implements ActionListener{
- JPanel jp1 = null;
- JPanel jp2 = null;
- JPanel jp3 = null;
- JTextField jtf1 = null;
- JTextField jtf2 = null;
- JLabel jl1 = null;
- JLabel jl2 = null;
- JButton jb1 = null;
- JButton jb2 = null;
- String s1;
- String s2;
- public Replace(){
- jp1 = new JPanel();
- jp2 = new JPanel();
- jp3 = new JPanel();
- jtf1 = new JTextField(10);
- jtf2 = new JTextField(10);
- jl1 = new JLabel("查找内容:");
- jl2 = new JLabel("替换为: ");
- jb1 = new JButton("替换");
- jb1.addActionListener(this);
- jb1.setActionCommand("replace");
- jb2 = new JButton("取消");
- jb2.addActionListener(this);
- jb2.setActionCommand("exit");
- jp1.add(jl1);
- jp1.add(jtf1);
- //System.out.println(s1);
- jp2.add(jl2);
- jp2.add(jtf2);
- //s2 = jtf2.getText();
- jp3.add(jb1);
- jp3.add(jb2);
- this.add(jp1,BorderLayout.NORTH);
- this.add(jp2);
- this.add(jp3,BorderLayout.SOUTH);
- this.setTitle("查找与替换");
- this.setVisible(true);
- this.setSize(300,150);
- }
- // public static void main(String []args){
- // new Replace();
- // }
- public void actionPerformed(ActionEvent e) {
- if(e.getActionCommand().equals("replace")){
- s1 = jtf1.getText();
- s2 = jtf2.getText();
- int first = Test.jta.getText().indexOf(s1);
- if(first!=-1 && s1.length()!=0){
- Test.jta.replaceRange(s2, first, first+s1.length());
- this.dispose();
- }
- else{
- JOptionPane jop = new JOptionPane();
- jop.showMessageDialog(null, "未检索到输入字符", "提示",JOptionPane.PLAIN_MESSAGE);
- }
- }
- if(e.getActionCommand().equals("exit")){
- this.dispose();
- }
- }
- }
- import java.io.BufferedWriter;
- import java.io.FileNotFoundException;
- import java.io.FileWriter;
- import java.io.IOException;
- import javax.swing.JFileChooser;
- public class Save{
- public void save(){
- JFileChooser jfc = new JFileChooser();
- if(Test.flag==true){
- jfc.setDialogTitle("另存为");
- jfc.showSaveDialog(null);
- jfc.setVisible(true);
- Test.filepath = jfc.getSelectedFile().getAbsolutePath();
- Test.flag = false;
- }
- FileWriter fw =null;
- BufferedWriter bw = null;
- try {
- fw = new FileWriter(Test.filepath);
- bw = new BufferedWriter(fw);
- bw.write(Test.jta.getText());
- } catch (FileNotFoundException e1) {
- e1.printStackTrace();
- } catch (IOException e2) {
- e2.printStackTrace();
- }finally{
- try {
- bw.close();
- fw.close();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- }
- }
打开功能:
- import java.io.BufferedReader;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
- import javax.swing.JFileChooser;
- class Open{
- public void open(){
- JFileChooser jfc =new JFileChooser();
- jfc.setDialogTitle("打开文件");
- jfc.showOpenDialog(null);
- jfc.setVisible(true);
- //获取路径
- String filepath = jfc.getSelectedFile().getAbsolutePath();
- FileReader fr = null;
- BufferedReader br = null;
- try {
- fr = new FileReader(filepath);
- br = new BufferedReader(fr);
- String s = "";
- String allText = "";
- while((s=br.readLine())!=null){
- allText+=s+"\r\n";
- }
- Test.jta.setText(allText);
- } catch (FileNotFoundException e1) {
- } catch (IOException e2) {
- e2.printStackTrace();
- }finally{//关闭通道
- try {
- br.close();
- fr.close();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- }
- }
- import javax.swing.JOptionPane;
- public class Find {
- public void search(){
- JOptionPane jop = new JOptionPane();
- String tempString = (String) jop.showInputDialog(null,"请输入要查找的关键字:\n","查找",JOptionPane.PLAIN_MESSAGE,null,null, "在这输入");
- int first = Test.jta.getText().indexOf(tempString);
- if(first!=-1)
- Test.jta.select(first, first+tempString.length());
- else if(tempString.length()==0)
- jop.showMessageDialog(null, "您还没有输入要查找的字符", "提示",JOptionPane.PLAIN_MESSAGE);
- else{
- jop.showMessageDialog(null, "未检索到输入字符,请重新查找", "提示",JOptionPane.PLAIN_MESSAGE);
- }
- }
- }