JTextArea 中的撤消功能

2023-11-23

我正在尝试实现撤消功能JTextArea。谷歌搜索教程并按照其中一个教程编写了以下代码。当按下 Ctrl+Z 键时会触发该事件。它不适合我。我错过了什么吗?

private void undoActionPerformed(java.awt.event.ActionEvent evt) {
    Document doc = editorTextArea.getDocument();
    final UndoManager undo = new UndoManager();

    doc.addUndoableEditListener(new UndoableEditListener() {
        @Override
        public void undoableEditHappened(UndoableEditEvent e) {
            undo.addEdit(e.getEdit());
        }
    });
}

从你的例子来看,很难知道你做了多少,但我能够让它发挥作用......

private UndoManager undoManager;

// In the constructor

undoManager = new UndoManager();
Document doc = textArea.getDocument();
doc.addUndoableEditListener(new UndoableEditListener() {
    @Override
    public void undoableEditHappened(UndoableEditEvent e) {

        System.out.println("Add edit");
        undoManager.addEdit(e.getEdit());

    }
});

InputMap im = textArea.getInputMap(JComponent.WHEN_FOCUSED);
ActionMap am = textArea.getActionMap();

im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "Undo");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Y, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "Redo");

am.put("Undo", new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent e) {
        try {
            if (undoManager.canUndo()) {
                undoManager.undo();
            }
        } catch (CannotUndoException exp) {
            exp.printStackTrace();
        }
    }
});
am.put("Redo", new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent e) {
        try {
            if (undoManager.canRedo()) {
                undoManager.redo();
            }
        } catch (CannotUndoException exp) {
            exp.printStackTrace();
        }
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JTextArea 中的撤消功能 的相关文章

随机推荐

  • Django 测试表没有被创建

    我正在尝试为我的 django 项目编写测试用例 但是当我运行时 manage py 测试 命令 它正在创建测试数据库 但没有创建任何表 并且我收到一个错误 表明表不存在 欢迎任何建议 这是我通过 manage pyspectdb gt m
  • PySpark 数据帧 to_json() 函数

    我有一个如下所示的数据框 gt gt gt df show 10 False id name age salary 10001 alex 30 75000 10002 bob 31 80000 10003 deb 31 80000 1000
  • 使用 twitter4j 停止 Twitter 流并返回状态列表

    使用 Twitter4j 提供的代码示例 我希望在收集 1 000 个状态列表后停止流 并返回此列表 我怎样才能做到这一点 public class Stream public List
  • 如何在 Windows 之间切换 python 版本

    我正在尝试在 python 版本之间切换3 6 6 and 3 7 0在窗户中 我试过py 3 6 6并且不起作用 寻找选项py h 没有找到 我看到了一些关于在 python 版本之间切换的答案2 x and 3 x通过增加 python
  • 复选框值 0 或 1

    在很多情况下 我有如下复选框
  • 类型“System.Web.IHtmlString”在未引用的程序集中定义

    现在有点失落 我正在按照以下文章来测试 学习嵌套布局 http blogs msdn com b marcinon archive 2010 12 15 razor nested layouts and redefine sections
  • 如何从 XSD 架构构建数据库并导入 XML 数据

    我有一个复杂的 XSD 架构和数百个符合该架构的 XML 文件 如何自动创建相关的 SQL Server 表来存储 XML 数据 我考虑过使用 XSD 模式创建 C 类xsd exe工具 并让 Subsonic 之类的东西弄清楚如何从中创建
  • Visual Studio 2012 中的经典 ASP 调试禁用应用程序调试

    我想调试Classic ASP网站位于Visual Studio 2012 with IIS Express 因此 我附上了iisexpress exe in VS 2012 但它显示Application Debugging is dis
  • 检测并删除文本区域中的 URL

  • Kendo UI Grid 序列号列

    我试图将 Kendo 网格的第一列作为串行索引 它不受行记录排序的影响 我有什么办法可以实现这个目标吗 谢谢 您可以使用模板列来实现此目的 这是一个现场演示 展示了如何做到这一点 http jsbin com olutin 10 edit
  • 为什么 Python 返回负时区值?

    For 时间 时区 Python 文档说 本地 非 DST 时区的偏移量 以 UTC 以西的秒数为单位 西欧大部分地区为负值 美国为正值 英国为零 有谁知道为什么它对西欧大部分地区返回负值 这些国家处于正抵消状态 而不是负抵消状态 示例 布
  • iOS 8 中自动调整 UITableViewCell 大小

    我有一个 UITableViewCell 子类 其中包含多行标签 我希望单元格根据该标签的内容动态调整自身大小 我知道 iOS 8 引入了基于自动布局约束的自动调整单元格大小 并且我已经在 SO 上找到了几个这样的示例 但我在正确实现此行为
  • 如何默认将AWS S3存储桶中的所有对象设为公开?

    我正在使用 PHP 库将文件上传到我的存储桶 我已将 ACL 设置为公共读写它工作正常 但文件仍然是私有的 我发现如果我改变受赠者给所有人它使文件公开 我想知道的是我该如何制作所有对象的默认受让人在我的桶中设置为 每个人 或者还有其他解决方
  • 在 AngularJs 中使用 $resource 来保存对象数组

    我在用 resource使用查询从服务器检索数据 服务器返回一个对象数组 我将其存储在斯图克利斯特 我可以发送 更新的 内容斯图克利斯特通过循环数组并使用 save 将数组的每个项目发送回服务器来返回到服务器 我现在想发送所有项目 整个斯图
  • iPhone - 读取Setting.bundle返回错误值

    我创建了一个 Settings bundle 其中包含 Root plist 文件和本地化目录 en lproj 我已经编辑了 Root plist 并添加了一些我想要为我的应用程序设置的设置 当我从 iPhone 中删除该应用程序并安装它
  • 更新到 Android Studio 后模拟器无法启动

    我已经通过标准更新通道将android studio更新到3 0 更新后无法启动模拟器 我已经尝试过以下方法 但没有任何效果 重新启动并重新安装 HAXM 安装程序 重新启动并重新安装 AVD 管理器 从终端启动模拟器 将 RAM 大小更改
  • 如何将 Kubernetes 集群更新到可用的最新版本?

    我最近开始尝试Google Container Engine 我希望您将 Kubernetes 集群升级到可用的最新版本 如果可能的话 不要停机 有什么办法可以做到这一点吗 不幸的是 我们目前拥有的最佳答案是创建一个新集群并将资源移过来 然
  • 如何使用 JavaScript 进行 LDAP 查询?

    我正在尝试制作一个具有 LDAP 查询功能的侧边栏小工具 但一直无法找到关于此事的非常好的或任何有用的文档 我对 Javascript 没有太多经验 并且对 LDAP 查询的功能知之甚少 所以任何信息都会有用 info 主持人 ab c d
  • R (data.table) 按自定义范围对数据进行分组(例如,-18、18-25、...、65+)

    我无法在 R 中找到解决方案 使用 data table 来按自定义范围 例如 18 18 25 65 而不是按单个值对数据进行分组 我现在正在使用的 DT list M Savings mean Savings M Term mean T
  • JTextArea 中的撤消功能

    我正在尝试实现撤消功能JTextArea 谷歌搜索教程并按照其中一个教程编写了以下代码 当按下 Ctrl Z 键时会触发该事件 它不适合我 我错过了什么吗 private void undoActionPerformed java awt