`

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多功能记事本

    我们可以在菜单中添加一个“跳转到行”选项,弹出输入框让用户输入行号,然后使用`JTextArea`的`setCaretPosition`方法将光标移动到指定行的开始位置。这里需要处理文本的换行符,根据不同的操作系统(如Windows的`\...

    Text.rar_界面编程_Java_

    Java的UndoManager类可以帮助我们实现这一功能。 最后,为了让界面看起来更加美观,我们可以使用Layout Managers来组织组件的位置和大小,比如GridLayout、BoxLayout和BorderLayout等。 在项目中,"Text--吴磊.txt...

    swing组件的详细介绍

    6. **撤销/重做(Undo/Redo)支持**:增强了用户交互体验。 7. **继承层级**:Swing组件通常继承自`javax.swing.JComponent`,这个类继承自AWT的`java.awt.Component`,并集成了更多的功能。 Swing的主要组件: -...

    editplus 3.60.870 天涯浪子

    EditPlus 的编辑窗口中 让你省去做贴上的步骤 另外它也是一个好用的 HTML 编辑器 除了可以颜色标记 HTML Tag 同时支持 C C++ Perl Java 外 还内建完整的 HTML 和 CSS1 指令功能 对于习惯用记事本编辑网页的朋友 它...

    SnackBarDemo

    它包含了多种组件和元素,如按钮、输入框、抽屉、snackbars等,帮助开发者构建符合现代设计趋势的应用。 【Snackbars】 Snackbars在Material Design中是一种轻量级的通知方式,通常用于显示简短的信息,告知用户...

    EditPlus_3.41.1145最新绿色破解版

    一套功能强大,可取代记事本的文字编辑器,拥有无限制的 Undo/Redo、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。而它还有一个好用的功能,就是它有监视剪贴簿的功能,能够同步于...

    BOS V6.2开发指南_控件

    此外,它支持undo和redo功能,能够动态刷新数据,并有自动调整列宽、支持Ctrl+C拷贝等功能。 2. KDTDesignerFrame控件:这是KDTable属性设置框的使用指南,用于配置和调整KDTable的相关属性。 3. KDTable Script...

    EditPlus_3.40.683 中文版

    一套功能强大,可取代记事本的文字编辑器,拥有无限制的 Undo/Redo、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。而它还有一个好用的功能,就是它有监视剪贴簿的功能,能够同步于...

    EditPlus 3.31 Build 860 简体中文版

    一套功能强大,可取代记事本的文字编辑器,拥有无限制的 Undo/Redo、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。而它还有一个好用的功能,就是它有监视剪贴簿的功能,能够同步于...

    EditPlus 3.31 Build 1129

    一套功能强大,可取代记事本的文字编辑器,拥有无限制的 Undo/Redo、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。而它还有一个好用的功能,就是它有监视剪贴簿的功能,能够同步于...

    正则表达式

    (isNaN(value))execCommand('undo')" onafterpaste="if(isNaN(value))execCommand('undo')"> (/\D/.test(this.value)){alert('只允许输入字母');this.value='';}"> ``` 这里,`/\D/`匹配任何非字母数字的字符,`...

Global site tag (gtag.js) - Google Analytics