Java 输入框 undo

来源:互联网 发布:御坂美琴棒球帽淘宝 编辑:程序博客网 时间:2024/05/23 23:28
Java代码  收藏代码
  1. package com.pass.component;  
  2.   
  3. import java.awt.event.ActionEvent;  
  4.   
  5. import javax.swing.AbstractAction;  
  6. import javax.swing.JTextArea;  
  7. import javax.swing.KeyStroke;  
  8. import javax.swing.event.UndoableEditEvent;  
  9. import javax.swing.event.UndoableEditListener;  
  10. import javax.swing.text.Document;  
  11. import javax.swing.undo.CannotRedoException;  
  12. import javax.swing.undo.CannotUndoException;  
  13. import javax.swing.undo.UndoManager;  
  14.   
  15. public class UndoTextArea extends JTextArea  
  16. {  
  17.     private static final long serialVersionUID = 2622113838910292609L;  
  18.     UndoManager undo = new UndoManager();  
  19.     Document    doc  = getDocument();  
  20.   
  21.     public void stopUndo()  
  22.     {  
  23. //        undo.die();  
  24.         undo.discardAllEdits();  
  25.     }  
  26.   
  27.     public UndoTextArea()  
  28.     {  
  29.         doc.addUndoableEditListener(new UndoableEditListener()  
  30.         {  
  31.             public void undoableEditHappened(UndoableEditEvent e)  
  32.             {  
  33.                 undo.addEdit(e.getEdit());  
  34.             }  
  35.         });  
  36.         addActionMap();  
  37.     }  
  38.   
  39.     public void addActionMap()  
  40.     {  
  41.         getActionMap().put("Undo"new AbstractAction("Undo11")  
  42.         {  
  43.             private static final long serialVersionUID = 2434402629308759912L;  
  44.   
  45.             public void actionPerformed(ActionEvent evt)  
  46.             {  
  47.                 try  
  48.                 {  
  49.                     boolean b = undo.canUndo();  
  50.                     //                    System.out.println("whether undo : "+b);  
  51.                     if (b)  
  52.                     {  
  53.                         undo.undo();  
  54.                     }  
  55.                 }  
  56.                 catch (CannotUndoException e)  
  57.                 {  
  58.                 }  
  59.             }  
  60.         });  
  61.         getInputMap().put(KeyStroke.getKeyStroke("control Z"), "Undo");  
  62.   
  63.         getActionMap().put("Redo"new AbstractAction("Redo1111")  
  64.         {  
  65.             private static final long serialVersionUID = 5348330289578410517L;  
  66.   
  67.             public void actionPerformed(ActionEvent evt)  
  68.             {  
  69.                 try  
  70.                 {  
  71.                     if (undo.canRedo())  
  72.                     {  
  73.                         undo.redo();  
  74.                     }  
  75.                 }  
  76.                 catch (CannotRedoException e)  
  77.                 {  
  78.                 }  
  79.             }  
  80.         });  
  81.         getInputMap().put(KeyStroke.getKeyStroke("control R"), "Redo");  
  82.   
  83.         getActionMap().put("Copy"new AbstractAction("Copy111")  
  84.         {  
  85.             private static final long serialVersionUID = -5151480809625853288L;  
  86.   
  87.             public void actionPerformed(ActionEvent evt)  
  88.             {  
  89.                 copy();  
  90.             }  
  91.   
  92.         });  
  93.         getInputMap().put(KeyStroke.getKeyStroke("control C"), "Copy");  
  94.   
  95.         getActionMap().put("Cut"new AbstractAction("Cut")  
  96.         {  
  97.   
  98.             private static final long serialVersionUID = 7316612864835857713L;  
  99.   
  100.             public void actionPerformed(ActionEvent evt)  
  101.             {  
  102.                 cut();  
  103.             }  
  104.   
  105.         });  
  106.   
  107.         getInputMap().put(KeyStroke.getKeyStroke("control X"), "Cut");  
  108.   
  109.         getActionMap().put("Paste"new AbstractAction("Paste111")  
  110.         {  
  111.             private static final long serialVersionUID = -3548620001691220571L;  
  112.   
  113.             public void actionPerformed(ActionEvent evt)  
  114.             {  
  115.                 paste();  
  116.             }  
  117.         });  
  118.   
  119.         getInputMap().put(KeyStroke.getKeyStroke("control V"), "Paste");  
  120.     }  
  121.   
  122. }  
 

测试类:FrameMain

Java代码  收藏代码
  1. package com.pass.test;  
  2.   
  3. import java.awt.Color;  
  4. import java.awt.GridLayout;  
  5.   
  6. import javax.swing.JFrame;  
  7. import javax.swing.JPanel;  
  8.   
  9. import com.pass.component.UndoTextArea;  
  10.   
  11. public class FrameMain extends JFrame  
  12. {  
  13.     private static final long serialVersionUID = 3526577815017461757L;  
  14.     public static void main(String[] args)  
  15.     {  
  16.         new FrameMain().launchFrame();  
  17.     }  
  18.     public void launchFrame(){  
  19.         JPanel pane=new JPanel();  
  20.         pane.setLayout(new GridLayout(21));  
  21.         UndoTextArea txt1= new UndoTextArea();  
  22.         txt1.setBackground(new Color(255255100));  
  23.         txt1.setText("txt1");  
  24.         txt1.stopUndo();  
  25.         UndoTextArea txt2= new UndoTextArea();  
  26.         txt2.setBackground(new Color(255100100));  
  27.         txt2.setText("txt2");  
  28.         txt2.stopUndo();  
  29.         pane.add(txt1);  
  30.         pane.add(txt2);  
  31.         this.getContentPane().add(pane);  
  32.         this.setBounds(100100400400);  
  33.         this.setDefaultCloseOperation(3);  
  34.         this.setVisible(true);  
  35.     }  
  36.   
  37. }  
 

运行FrameMain,弹出swing窗口

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

0 0