源自早先想法, 打算从界面方向做些尝试. 找到个简单文本编辑器的实现: Simple Text Editor - Java Tutorials. 原本的菜单/按钮界面如下. 包括基本功能: 新建/打开/保存文件, 文本编辑与剪切/复制/粘贴.

把所有菜单/按钮替换为命令输入后效果如下, 源码库在: program-in-chinese/simple-text-editor-in-Java. 与其他命令行工具一样, 省去界面元素的代价是输入较繁琐. 在文本和命令两处切换也有点麻烦.

接下去试着实现命令输入的自动补全等等.

实现源码如下. 不采用第三方库, 比较粗糙的代码180行.

public class 文本编辑器 extends JFrame {

  private static final String 默认文件名 = "无名";

  private JTextArea 文本区域 = new JTextArea(20, 120);
private JTextArea 命令文本区 = new JTextArea(5, 20);
private JFileChooser 对话框 = new JFileChooser(System.getProperty("user.dir"));
private String 当前文件 = 默认文件名;
private String 当前命令 = "";
private boolean 已改 = false; public static void main(String[] arg) {
new 文本编辑器();
} public 文本编辑器() {
文本区域.setFont(new Font("Monospaced", Font.PLAIN, 12));
JScrollPane 文本区 = new JScrollPane(文本区域, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
add(文本区, BorderLayout.CENTER); 命令文本区.setFont(new Font("Monospaced", Font.PLAIN, 12));
JScrollPane 命令区 = new JScrollPane(命令文本区, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
add(命令区, BorderLayout.EAST); setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
文本区域.addKeyListener(监听文本输入);
命令文本区.addKeyListener(命令监听);
setTitle(当前文件);
setVisible(true);
} private KeyListener 监听文本输入 = new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
已改 = true;
}
}; private KeyListener 命令监听 = new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
int 行数 = 命令文本区.getLineCount();
if (行数 == 1) {
当前命令 = 命令文本区.getText();
} else {
try {
int 上一行末位置 = 命令文本区.getLineEndOffset(行数 - 2);
当前命令 = 命令文本区.getText().substring(上一行末位置);
} catch (BadLocationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
执行(当前命令);
}
}
}; private void 执行(String 当前命令) {
switch (当前命令) {
case "新建":
新建操作();
break;
case "打开":
打开操作();
break;
case "保存":
保存操作();
break;
case "另存":
另存文件为();
break;
case "退出":
退出操作();
break;
case "剪切":
文本区域.cut();
break;
case "复制":
文本区域.copy();
break;
case "粘贴":
文本区域.paste();
break;
default:
// TODO: 提示无此命令或显示帮助
break;
}
} private void 新建操作() {
保存旧文件();
文本区域.setText("");
当前文件 = 默认文件名;
setTitle(当前文件);
已改 = false;
} private void 打开操作() {
保存旧文件();
if (对话框.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
读入文件(对话框.getSelectedFile().getAbsolutePath());
}
} private void 保存操作() {
if (!当前文件.equals(默认文件名))
保存文件(当前文件);
else
另存文件为();
} private void 退出操作() {
保存旧文件();
System.exit(0);
} private void 另存文件为() {
if (对话框.showSaveDialog(null) == JFileChooser.APPROVE_OPTION)
保存文件(对话框.getSelectedFile().getAbsolutePath());
} private void 保存旧文件() {
if (已改) {
if (JOptionPane.showConfirmDialog(this, "保存 " + 当前文件 + " 吗?", "保存",
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
保存文件(当前文件);
}
} private void 读入文件(String 文件名) {
try {
FileReader 读 = new FileReader(文件名);
文本区域.read(读, null);
读.close();
当前文件 = 文件名;
setTitle(当前文件);
已改 = false;
} catch (IOException e) {
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(this, "找不到 " + 文件名);
}
} private void 保存文件(String 文件名) {
try {
FileWriter 写 = new FileWriter(文件名);
文本区域.write(写);
写.close();
当前文件 = 文件名;
setTitle(当前文件);
已改 = false;
} catch (IOException e) {
}
}
}

参考

adding a console to a Jframe

Detecting when user presses enter in Java

Java SWING JFrame Layouts Example

Java实现"命令式"简易文本编辑器原型的更多相关文章

  1. C++ mfc 简易文本编辑器 遇到的一些问题

    [题目40]简易文本编辑器. 设计一个简易的文本编辑器. 设计要求: (1) 具有图形菜单界面: (2) 查找,替换(等长,不等长),插入(插串,文本块的插入).文本块移动(行块,列块移动),删除; ...

  2. javascript 简易文本编辑器

    转载请注明出处:http://www.cnblogs.com/enzozo/p/4357031.html 写在前面: 本文本编辑器具备功能:选择字体大小.颜色.加粗.斜体.下划线.点击 'Submit ...

  3. AUTOGUI生成的一个简易文本编辑器

    ; Generated by AutoGUI #SingleInstance Force #NoEnv SetWorkingDir %A_ScriptDir% SetBatchLines - #Inc ...

  4. Java开发之富文本编辑器TinyMCE

    一.题外话 最近负责了一个cms网站的运维,里面存在很多和编辑器有关的问题,比如编辑一些新闻博客,论文模块.系统采用的是FCKEditor,自我感觉不是很好,如下图 特别是在用户想插入一个图片的话,就 ...

  5. java文本编辑器5

    package peng_jun; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.* ...

  6. Java-Swing中使用Web富文本编辑器

    资料下载 (截取出了邮件发送的功能.) 2018/11/10 因为要 win7 电脑 IE 8 的原因,使用了 jxBrower 拓展,更容易使用,参考链接(推荐) 问题介绍 window客户端软件的 ...

  7. Java实现简易的文本编辑器

    需求分析: 获得文本名称 实现尾部追加功能 实现覆盖式添加数据 删除数据 获取光标位置 在特定光标位置处添加数据 查找特定字符串在主串中第一次出现的位置 统计文本文件内出现的数字,汉字,英文字母,特殊 ...

  8. Java编写的文本编辑器(菜鸟作品)

    //这是主窗体文件 Wordwin.java import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.sw ...

  9. 简易富文本编辑器bootstrap-wysiwyg源码注释

    好久没写随笔了,因为最近比较忙,小公司基本都是一个前端干所有属于和部分不属于前端的事情,所以就没空弄了,即使想分享,也因为没有时间和精力就搁置了. 这周周六日休息,正好时间比较充裕(ps:目前处在单休 ...

随机推荐

  1. 【ODI】| 数据ETL:从零开始使用Oracle ODI完成数据集成(二)

    前一节已经完成了Oracle数据库和ODI的安装,并已经为ODI在Oracle数据库中创建了两个用户,分别用于存放主资料库数据和工作资料库数据,在ODI中完成主资料库和工作资料库的创建,也分别为其创建 ...

  2. Java基础面试知识点总结

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  3. Electron学习笔记(一)

    Electron是使用Javascript.HTML5技术构建跨平台桌面应用的技术,是目前非常活跃的一项技术,其中比较有名气的应用有微软的VS Code. 创建一个Electron应用的方式有很多,G ...

  4. 程序猿必知必会Linux命令之awk

    前言 对于一名专业的程序员来说,Linux相关知识是必须要掌握的,其中对于文本的处理更是我们常见的操作,比如格式化输出我们需要的数据,这些数据可能会来源于文本文件或管道符,或者统计文本里面我们需要的数 ...

  5. DSAPI 生成桌面图标(带数字)

    功能:在桌面上创建一个带有指定数字的图标. 效果图: 生成的ICO图标 代码 Private Sub 生成桌面图标(消息数量 As Integer) Try Dim B As New Bitmap(M ...

  6. 手把手教你整合SSM框架(基于课工厂+MyEclipse 2017 CI 10)

    步骤1:myeclipse创建项目,导入spring框架 整合思路:因为spring和spring mvc同源,可以无缝整合,故先整合spring+mybatis,然后配置web.xml.spring ...

  7. 设计模式之行为类模式PK

    行为类模式包括: 责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式 行为型模式涉及到算法和对象间职责的分配 行为类模式关注 ...

  8. 写个重新加载 ocelot 配置的接口

    写个重新加载 ocelot 配置的接口 Intro 我们想把 ocelot 的配置放在自己的存储中,放在 Redis 或者数据库中,当修改了 Ocelot 的配置之后希望即时生效,又不想在网关这边定时 ...

  9. 关于Python中读取写入文件并进行文件与用户交互的操作

    一.提前知识点 在python中是同样和其他语言一样可以进行文件的读取写入操作,值得注意的是,Python中打开文件读取的方式有几种,分别是以下几种: f = open('username.txt') ...

  10. Ambari安装及自定义service初步实现

    Ambari安装 1 Ambari简介 Apache Ambari项目的目的是通过开发软件来配置.监控和管理hadoop集群,以使hadoop的管理更加简单.同时,ambari也提供了一个基于它自身R ...