`

Java 输入框 undo

    博客分类:
  • Java
阅读更多

类UndoTextArea:

package com.pass.component;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.text.Document;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoManager;

public class UndoTextArea extends JTextArea
{
    private static final long serialVersionUID = 2622113838910292609L;
    UndoManager undo = new UndoManager();
    Document    doc  = getDocument();

    public void stopUndo()
    {
//        undo.die();
        undo.discardAllEdits();
    }

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

    public void addActionMap()
    {
        getActionMap().put("Undo", new AbstractAction("Undo11")
        {
            private static final long serialVersionUID = 2434402629308759912L;

            public void actionPerformed(ActionEvent evt)
            {
                try
                {
                    boolean b = undo.canUndo();
                    //                    System.out.println("whether undo : "+b);
                    if (b)
                    {
                        undo.undo();
                    }
                }
                catch (CannotUndoException e)
                {
                }
            }
        });
        getInputMap().put(KeyStroke.getKeyStroke("control Z"), "Undo");

        getActionMap().put("Redo", new AbstractAction("Redo1111")
        {
            private static final long serialVersionUID = 5348330289578410517L;

            public void actionPerformed(ActionEvent evt)
            {
                try
                {
                    if (undo.canRedo())
                    {
                        undo.redo();
                    }
                }
                catch (CannotRedoException e)
                {
                }
            }
        });
        getInputMap().put(KeyStroke.getKeyStroke("control R"), "Redo");

        getActionMap().put("Copy", new AbstractAction("Copy111")
        {
            private static final long serialVersionUID = -5151480809625853288L;

            public void actionPerformed(ActionEvent evt)
            {
                copy();
            }

        });
        getInputMap().put(KeyStroke.getKeyStroke("control C"), "Copy");

        getActionMap().put("Cut", new AbstractAction("Cut")
        {

            private static final long serialVersionUID = 7316612864835857713L;

            public void actionPerformed(ActionEvent evt)
            {
                cut();
            }

        });

        getInputMap().put(KeyStroke.getKeyStroke("control X"), "Cut");

        getActionMap().put("Paste", new AbstractAction("Paste111")
        {
            private static final long serialVersionUID = -3548620001691220571L;

            public void actionPerformed(ActionEvent evt)
            {
                paste();
            }
        });

        getInputMap().put(KeyStroke.getKeyStroke("control V"), "Paste");
    }

}
 

测试类:FrameMain

package com.pass.test;

import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;

import com.pass.component.UndoTextArea;

public class FrameMain extends JFrame
{
    private static final long serialVersionUID = 3526577815017461757L;
    public static void main(String[] args)
    {
        new FrameMain().launchFrame();
    }
    public void launchFrame(){
        JPanel pane=new JPanel();
        pane.setLayout(new GridLayout(2, 1));
        UndoTextArea txt1= new UndoTextArea();
        txt1.setBackground(new Color(255, 255, 100));
        txt1.setText("txt1");
        txt1.stopUndo();
        UndoTextArea txt2= new UndoTextArea();
        txt2.setBackground(new Color(255, 100, 100));
        txt2.setText("txt2");
        txt2.stopUndo();
        pane.add(txt1);
        pane.add(txt2);
        this.getContentPane().add(pane);
        this.setBounds(100, 100, 400, 400);
        this.setDefaultCloseOperation(3);
        this.setVisible(true);
    }

}
 

运行FrameMain,弹出swing窗口

随便输入什么内容,然后Ctrl+Z 就可以进行测试了。

 

 

分享到:
评论

相关推荐

    java 实现undo/redo 三

    NULL 博文链接:https://saga-java.iteye.com/blog/1549583

    Java 编辑器Undo Redo

    实现Java中编辑器的Undo、Redo操作,功能比较强大

    Undo

    Undo

    C#做的简单的Undo、Redo功能的实现

    这个是做实验时,简单基本的Undo、Redo的操作、在一个winForm中实现,并且可以设置Undo的最大次数。包中除了项目外,还附有报告.

    redo undo framework source code

    redo undo framework source code redo undo framework source code

    seata-oracle版undolog.sql

    oracle版本的undolog建表语句。 2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback),和社区一起共建开源分布式事务解决方案。Fescar 的愿景是让分布式事务的使用像本地...

    c# undo/redo例子

    c# undo/redo例子 支持文字的样式,颜色修改 动态进度条

    JAVA_API1.6文档(中文)

    javax.swing.undo 允许开发人员为应用程序(例如文本编辑器)中的撤消/恢复提供支持。 javax.transaction 包含解组期间通过 ORB 机制抛出的三个异常。 javax.transaction.xa 提供定义事务管理器和资源管理器之间的...

    相克军 ORACLE 讲座 深度剖析UNDO段 笔记.doc

    UNDO表空间用来存放改变前的旧值。里面也有段区块,ORACLE自动建立生成、自动使用UNDO段。 作为高级别的DBA是需要知道ORACLE如何使用UNDO段的。 1 Undo表空间及管理方式 ORACLE开始一个事务的时候,会用到表空间。...

    12c 新特性-Temporary Undo

    介绍12c新特性Temporary Undo

    Undo_Redo机制在CAD中的应用

    Undo_Redo机制在CAD中的应用, 摘要:为了增强CAD系统的灵活性,提高设计的效率,本文引入设计模式概念,通过对数据对象的持久化.设计出一套支 持无限Undo/Redo和批量化操作的CAD图形绘制系统,文章介绍了各模块的...

    C#实现的undo/redo的window窗体

    针对一个window窗体实现了undo/redo功能,包括textBox,checkBox, listBox, comboBox, radioButton以及按钮焦点变化的实现。可能有些小bug思路仅供参考。完整的工程文件,VS打开即可运行,欢迎评论~ 详细说明参见...

    C# undo\redo框架

    Undo/Redo framework for editing controls in a Windows application 在Windows应用程序中编辑控件的撤销/重做框架。

    mfc support redo/undo

    实现redo,undo操作,来源于网络分享下。

    undo redo 原型设计

    cpp文件 undo redo 原型设计 部分代码 class Command { public: virtual BOOL UnDo() = 0; virtual BOOL ReDo() = 0; };

    UNDO表空间管理

    比较深入浅出的描述了基于oracle10g/11g的UNDO表空间的管理

    RAC下的REDO和UNDO管理

    RAC下的REDO和UNDO管理 收藏.docxRAC下的REDO和UNDO管理 收藏.docxRAC下的REDO和UNDO管理 收藏.docxRAC下的REDO和UNDO管理 收藏.docxRAC下的REDO和UNDO管理 收藏.docxRAC下的REDO和UNDO管理 收藏.docxRAC下的REDO和...

    收缩Oracle数据库的undo表空间

    演示如何收缩Oracle数据库的undo表空间

    Multiple Level Undo/Redo多级Undo/Redo功能的实现(7KB)

    Multiple Level Undo/Redo多级Undo/Redo功能的实现(7KB)

Global site tag (gtag.js) - Google Analytics