如何在JTextArea中实现撤消功能

xsjohn 2006-09-16 02:20:04
如何在JTextArea中实现撤消功能,JTextArea是否有现成的方法可以调用?求教大人~~
...全文
154 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
mq612 2006-09-16
  • 打赏
  • 举报
回复
你要的是Undo和Redo吧?
真正操控Undo、Redo功能的是Document,下面写个小例子,希望对你有帮助:

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;

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();
}

}
实现了记事本的大部分功能,适合新手看。 // 文本编辑区 private JTextArea editArea = new JTextArea(); // 菜单项 private JMenu[] menus = { new JMenu("文件(F)"), new JMenu("编辑(E)"), new JMenu("格式(E)"), new JMenu("查看(V)"), new JMenu("帮助(H)") }; private JMenuItem[] fileMenu = { new JMenuItem("新建(N) "), new JMenuItem("打开(O)... "), new JMenuItem("保存(S) "), new JMenuItem("另存为(A)... "), new JMenuItem("页面设置(U)... "), new JMenuItem("打印(P)... "), new JMenuItem("退出(X) ") }; private JMenuItem[] editMenu = { new JMenuItem("撤销(U) "), new JMenuItem("剪切(T) "), new JMenuItem("复制(C) "), new JMenuItem("黏贴(P) "), new JMenuItem("删除(L) "), new JMenuItem("查找(F)... "), new JMenuItem("查找下一个(N) "), new JMenuItem("替换(R)... "), new JMenuItem("转到(G)... "), new JMenuItem("全选(A) "), new JMenuItem("时间/日期(D) ") }; private JCheckBoxMenuItem formatMenu1 = new JCheckBoxMenuItem( "自动换行(W) "); private JMenuItem formatMenu2 = new JMenuItem("字体(F)... "); private JMenuItem checkMenu = new JMenuItem("状态栏(S) "); private JMenuItem[] helpMenu = { new JMenuItem("查看帮助(H) "), new JMenuItem("关于记事本(A) ") }; private JPopupMenu pmenus = new JPopupMenu(); private JMenuItem[] popupMenu = { new JMenuItem("撤销(U) "), new JMenuItem("剪切(T) "), new JMenuItem("复制(C) "), new JMenuItem("黏贴(P) "), new JMenuItem("删除(L) "), new JMenuItem("全选(A) "), }; // 剪切板引用 private Toolkit toolKit = Toolkit.getDefaultToolkit(); private Clipboard clipBoard = toolKit.getSystemClipboard(); // 其他变量 private boolean isNewFile = true; private File currentFile; private String oldTxt; // 撤销管理器 private UndoManager undo = new UndoManager(); private UndoableEditListener undoHandler = new UndoHandler();

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧