import java.awt.BorderLayout; |
import java.awt.event.ActionEvent; |
import java.awt.event.ActionListener; |
import javax.swing.JButton; |
import javax.swing.JFrame; |
import javax.swing.JPanel; |
import javax.swing.JScrollPane; |
import javax.swing.JTextArea; |
import javax.swing.event.UndoableEditEvent; |
import javax.swing.text.Document; |
import javax.swing.undo.UndoManager; |
/** |
* 在JTextArea中实现Redo和Undo功能 |
* @author 五斗米 <如转载请保留作者和出处> |
* @blog <a href="http://blog.csdn.net/mq612">http://blog.csdn.net/mq612 |
*/ |
public class Test extends JFrame { |
private static final long serialVersionUID = -2397593626990759111L; |
private JPanel pane = null ; |
private JButton undo = null , redo = null ; |
private JScrollPane sPane = null ; |
private JTextArea text = null ; |
private Document doc = null ; |
private UndoManager undomang = null ; |
public Test() { |
super ( "Redo and Undo" ); |
undomang = new UndoManager(){ |
private static final long serialVersionUID = -5960092671497318496L; |
public void undoableEditHappened(UndoableEditEvent e) { |
this .addEdit(e.getEdit()); |
} |
}; |
text = new JTextArea(); |
doc = text.getDocument(); |
redo = new JButton( ">>" ); |
undo = new JButton( "<<" ); |
undo.addActionListener( new ActionListener() { |
public void actionPerformed(ActionEvent arg0) { |
if (undomang.canUndo()) |
undomang.undo(); |
} |
}); |
redo.addActionListener( new ActionListener() { |
public void actionPerformed(ActionEvent e) { |
if (undomang.canRedo()) |
undomang.redo(); |
} |
}); |
pane = new JPanel(); |
pane.add(undo); |
pane.add(redo); |
doc.addUndoableEditListener(undomang); |
sPane = new JScrollPane(text); |
this .getContentPane().add(sPane); |
this .getContentPane().add(pane, BorderLayout.NORTH); |
this .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
this .setSize( 300 , 200 ); |
this .setVisible( true ); |
} |
public static void main(String args[]) { |
new Test(); |
} |
} |
//源代码片段来自云代码http://yuncode.net |
|