【问题标题】:Creating a simple text editor in Java [closed]在 Java 中创建一个简单的文本编辑器 [关闭]
【发布时间】:2016-05-24 16:42:47
【问题描述】:

如何创建像记事本这样的文本编辑器?使用 Java 的 GUI 元素具有“新建文件”、“打开文件”、“保存文件”、“格式化文本”等功能。

【问题讨论】:

    标签: java eclipse jframe jtextpane jmenubar


    【解决方案1】:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.io.*;
    import java.util.*;
    
    public class Texteditor extends JFrame implements ActionListener
    {
                MenuBar mbar;
                Menu file,edit,format,font,font1,font2;
                MenuItem item1,item2,item3,item4;
                MenuItem item5,item6,item7,item8,item9,item10;
                MenuItem fname1,fname2,fname3,fname4;
                MenuItem fstyle1,fstyle2,fstyle3,fstyle4;
                MenuItem fsize1,fsize2,fsize3,fsize4;
    
    JPanel mainpanel;
    TextArea text;
    
    Font f;
    String months[]={
    "Jan","Feb","Mar","Apr",
    "May","Jun","Jul","Aug",
    "Sep","Oct","Nov","Dec"};
    
    GregorianCalendar gcalendar;
    
    
    String command=" ";
    String str=" ";
    
    String str1=" ",str2=" ",str3=" ";
    String str4=" ";
    
    String str6=" ";
    String str7=" ",str8=" ",str9=" ";
    
    int len1;
    
    int i=0;
    int pos1;
    int len;
    
    public Texteditor(String str)
    {
    
    super(str);
    
    mainpanel=new JPanel();
    mainpanel=(JPanel)getContentPane();
    mainpanel.setLayout(new FlowLayout());
    
    
    mbar=new MenuBar();
    setMenuBar(mbar);
    
    file=new Menu("File");
    edit=new Menu("Edit");
    format=new Menu("Format");
    font=new Menu("Font");
    font1=new Menu("Font Style");
    font2=new Menu("Size");
    
    file.add(item1=new MenuItem("New..."));
    file.add(item2=new MenuItem("Open"));
    file.add(item3=new MenuItem("Save As..."));
    file.add(item4=new MenuItem("Exit"));
    mbar.add(file);
    
    
    edit.add(item5=new MenuItem("Cut (Ctrl+X)"));
    edit.add(item6=new MenuItem("Copy (Ctrl+C)"));
    edit.add(item7=new MenuItem("Paste (Ctrl+V)"));
    edit.add(item8=new MenuItem("Delete"));
    edit.add(item10=new MenuItem("Select All (Ctrl+A)"));
    edit.add(item9=new MenuItem("Time/Date"));
    mbar.add(edit);
    
    format.add(font);
    format.add(font1);
    format.add(font2);
    
    font.add(fname1=new MenuItem("Courier"));
    font.add(fname2=new MenuItem("Sans Serif"));
    font.add(fname3=new MenuItem("Monospaced"));
    font.add(fname4=new MenuItem("Symbol"));
    
    font1.add(fstyle1=new MenuItem("Regular"));
    font1.add(fstyle2=new MenuItem("Bold"));
    font1.add(fstyle3=new MenuItem("Italic"));
    font1.add(fstyle4=new MenuItem("Bold Italic"));
    
    font2.add(fsize1=new MenuItem("12"));
    font2.add(fsize2=new MenuItem("14"));
    font2.add(fsize3=new MenuItem("18"));
    font2.add(fsize4=new MenuItem("20"));
    
    mbar.add(format);
    
    
    
    item1.addActionListener(this);
    item2.addActionListener(this);
    item3.addActionListener(this);
    item4.addActionListener(this);
    item5.addActionListener(this);
    item6.addActionListener(this);
    item7.addActionListener(this);
    item8.addActionListener(this);
    item9.addActionListener(this);
    item10.addActionListener(this);
    fname1.addActionListener(this);
    fname2.addActionListener(this);
    fname3.addActionListener(this);
    fname4.addActionListener(this);
    fstyle1.addActionListener(this);
    fstyle2.addActionListener(this);
    fstyle3.addActionListener(this);
    fstyle4.addActionListener(this);
    fsize1.addActionListener(this);
    fsize2.addActionListener(this);
    fsize3.addActionListener(this);
    fsize4.addActionListener(this);
    
    
    text=new TextArea(26,60);
    mainpanel.add(text);
    
    f=new Font("Monotype Corsiva",Font.PLAIN,15);
    text.setFont(f);
    }
    
    
    
    
    public void actionPerformed(ActionEvent ae)
    {
    
    
    command=(String)ae.getActionCommand();
    
    if(command.equals("New..."))
    {
    dispose();
    Texteditor note1 = new Texteditor("Untitled-Notepad");
    note1.setSize(500,500);
    note1.setVisible(true);
    }
    
    try
    {
    
    if(command.equals("Open"))
    {
    
    str4=" ";
    FileDialog dialog=new FileDialog(this,"Open");
    dialog.setVisible(true);
    
    str1=dialog.getDirectory();
    str2=dialog.getFile();
    str3=str1+str2;
    File f=new File(str3);
    FileInputStream fobj=new FileInputStream(f);
    len=(int)f.length();
    for(int j=0;j<len;j++)
    {
    char str5=(char)fobj.read();
    str4=str4 + str5;
    
    }
    
    text.setText(str4);
    
    }
    }
    catch(IOException e)
    {}
    
    
    try
    {
    
    if(command.equals("Save As..."))
    {
    FileDialog dialog1=new FileDialog(this,"Save As",FileDialog.SAVE);
    dialog1.setVisible(true);
    
    str7=dialog1.getDirectory();
    str8=dialog1.getFile();
    str9=str7+str8;
    
    
    str6=text.getText();
    len1=str6.length();
    byte buf[]=str6.getBytes();
    
    File f1=new File(str9);
    FileOutputStream fobj1=new FileOutputStream(f1);
    for(int k=0;k<len1;k++)
    {
    fobj1.write(buf[k]);
    }
    fobj1.close();
    }
    
    this.setTitle(str8);
    
    }
    catch(IOException e){}
    
    
    
    if(command.equals("Exit"))
    {
    System.exit(0);
    }
    
    if(command.equals("Cut (Ctrl+X)"))
    {
    str=text.getSelectedText();
    i=text.getText().indexOf(str);
    text.replaceRange(" ",i,i+str.length());
    }
    
    if(command.equals("Copy (Ctrl+C)"))
    {
    str=text.getSelectedText();
    }
    
    if(command.equals("Paste (Ctrl+V)"))
    {
    pos1=text.getCaretPosition();
    text.insert(str,pos1);
    }
    if(command.equals("Delete"))
    {
    String msg=text.getSelectedText();
    i=text.getText().indexOf(msg);
    text.replaceRange(" ",i,i+msg.length());
    }
    if(command.equals("Time/Date"))
    {
    gcalendar=new GregorianCalendar();
    String h=String.valueOf(gcalendar.get(Calendar.HOUR));
    String m=String.valueOf(gcalendar.get(Calendar.MINUTE));
    String s=String.valueOf(gcalendar.get(Calendar.SECOND));
    String date=String.valueOf(gcalendar.get(Calendar.DATE));
    String mon=months[gcalendar.get(Calendar.MONTH)];
    String year=String.valueOf(gcalendar.get(Calendar.YEAR));
    String hms="Time"+" - "+h+":"+m+":"+s+" Date"+" - "+date+" "+mon+" "+year;
    int loc=text.getCaretPosition();
    text.insert(hms,loc);
    }
    if(command.equals("Courier"))
    {
    
    String fontName=f.getName();
    String fontFamily=f.getFamily();
    int fontSize=f.getSize();
    int fontStyle=f.getStyle();
    
    f=new Font("Courier",fontStyle,fontSize);
    text.setFont(f);
    }
    if(command.equals("Sans Serif"))
    {
    String fontName=f.getName();
    String fontFamily=f.getFamily();
    int fontSize=f.getSize();
    int fontStyle=f.getStyle();
    
    f=new Font("Sans Serif",fontStyle,fontSize);
    text.setFont(f);
    }
    if(command.equals("Monospaced"))
    {
    String fontName=f.getName();
    String fontFamily=f.getFamily();
    int fontSize=f.getSize();
    int fontStyle=f.getStyle();
    
    f=new Font("Monospaced",fontStyle,fontSize);
    text.setFont(f);
    }
    
    if(command.equals("Symbol"))
    {
    String fontName=f.getName();
    String fontFamily=f.getFamily();
    int fontSize=f.getSize();
    int fontStyle=f.getStyle();
    
    f=new Font("Symbol",fontStyle,fontSize);
    text.setFont(f);
    System.out.println(f.getFamily());
    }
    if(command.equals("Regular"))
    {
    String fontName=f.getName();
    String fontFamily=f.getFamily();
    int fontSize=f.getSize();
    int fontStyle=f.getStyle();
    
    f=new Font(fontName,Font.PLAIN,fontSize);
    text.setFont(f);
    }
    if(command.equals("Bold"))
    {
    String fontName=f.getName();
    String fontFamily=f.getFamily();
    int fontSize=f.getSize();
    int fontStyle=f.getStyle();
    
    f=new Font(fontName,Font.BOLD,fontSize);
    text.setFont(f);
    }
    if(command.equals("Italic"))
    {
    String fontName=f.getName();
    String fontFamily=f.getFamily();
    int fontSize=f.getSize();
    int fontStyle=f.getStyle();
    
    f=new Font(fontName,Font.ITALIC,fontSize);
    text.setFont(f);
    }
    if(command.equals("Bold Italic"))
    {
    String fontName=f.getName();
    String fontFamily=f.getFamily();
    int fontSize=f.getSize();
    int fontStyle=f.getStyle();
    
    f=new Font(fontName,Font.BOLD|Font.ITALIC,fontSize);
    text.setFont(f);
    }
    
    if(command.equals("12"))
    {
    String fontName=f.getName();
    String fontFamily=f.getFamily();
    int fontSize=f.getSize();
    int fontStyle=f.getStyle();
    
    f=new Font(fontName,fontStyle,12);
    text.setFont(f);
    }
    
    if(command.equals("14"))
    {
    String fontName=f.getName();
    String fontFamily=f.getFamily();
    int fontSize=f.getSize();
    int fontStyle=f.getStyle();
    
    f=new Font(fontName,fontStyle,14);
    text.setFont(f);
    }
    if(command.equals("18"))
    {
    String fontName=f.getName();
    String fontFamily=f.getFamily();
    int fontSize=f.getSize();
    int fontStyle=f.getStyle();
    
    f=new Font(fontName,fontStyle,18);
    text.setFont(f);
    }
    if(command.equals("20"))
    {
    String fontName=f.getName();
    String fontFamily=f.getFamily();
    int fontSize=f.getSize();
    int fontStyle=f.getStyle();
    
    f=new Font(fontName,fontStyle,20);
    text.setFont(f);
    }
    if(command.equals("Select All (Ctrl+A)"))
    {
    String strText=text.getText();
    int strLen=strText.length();
    text.select(0,strLen);
    }
    
    
    }
    
    public static void main(String args[])
    {
    Texteditor note = new Texteditor("Untitled-Notepad");
    note.setSize(500,500);
    note.setVisible(true);
    }
    }
    

    【讨论】:

    • 这对我不起作用。刚打开GUI,我什么都写不出来。
    【解决方案2】:

    我在 Eclipse 中构建的完整项目,这里是 Github 的链接:

    https://github.com/devanshu-netwuk/DevPad-Java-Based-Text-Editor

    【讨论】:

    • 链接文件不存在。
    • 点击链接时出现404错误
    • 链接断开,404
    • 链接失效了,更新一下
    猜你喜欢
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多