Java 输入框 undo

类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 就可以进行测试了。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值