我实现了一个可撤消的JTextField,问题是当我创建多个JTextField时,它只是撤消创建的最后一个实例。代码如下-要复制,请在第三个字段中输入一些文本,然后在第一个文本字段中输入一些代码并键入ctrl-z以撤消-它只从第三个文本字段中删除文本。有人能看到我做错了什么吗?
import java.awt.BorderLayout;
import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoManager;
public class UndoableTextFieldTest
{
public static void main(String... s)
{
new UndoableTextFieldTest();
}
public UndoableTextFieldTest()
{
JFrame frame = new JFrame("UndoableTextFieldTest");
UndoableTextField f1 = new UndoableTextField();
UndoableTextField f2 = new UndoableTextField();
UndoableTextField f3 = new UndoableTextField();
frame.setLayout(new BorderLayout());
frame.getContentPane().add(f1, BorderLayout.NORTH);
frame.getContentPane().add(f2, BorderLayout.CENTER);
frame.getContentPane().add(f3, BorderLayout.SOUTH);
frame.setSize(360, 115);
frame.setVisible(true);
}
public class UndoableTextField extends JTextField
{
KeyStroke undoKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_Z, Event.CTRL_MASK);
KeyStroke redoKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_Y, Event.CTRL_MASK);
public UndoableTextField()
{
UndoManager undoManager = new UndoManager();
getDocument().addUndoableEditListener(new UndoableEditListener()
{
@Override
public void undoableEditHappened(UndoableEditEvent e)
{
undoManager.addEdit(e.getEdit());
}
});
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(undoKeyStroke, "undoKeyStroke");
getActionMap().put("undoKeyStroke", new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
try
{
undoManager.undo();
} catch (CannotUndoException cue) {}
}
});
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(redoKeyStroke, "redoKeyStroke");
getActionMap().put("redoKeyStroke", new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
try
{
undoManager.redo();
} catch (CannotRedoException cre) {}
}
});
}
}
}
我不是100%确定,但我的猜测是您使用的输入映射在窗口中的所有组件之间共享。前两个字段的放置被第三个字段的放置覆盖。
如果我使用getInputMap()
,则撤消似乎对每个文本字段都有效。
问题内容: 众所周知,Java 是不可变的。自从成立以来,不可变字符串是Java的重要补充。不变性允许快速访问和大量优化,与C风格的字符串相比,不易出错,并有助于加强安全性模型。 无需使用骇客就可以创建一个可变的对象,即 引导类加载器中的类 JNI(或JNA,因为它需要JNI) 但是有可能仅使用普通Java,以便可以随时修改字符串吗?问题是 如何 ? 问题答案: 使用Charset构造函数创建一个
Revert 命令可以撤消之前做过的某个提交。 练习 1,先查看一下项目的提交历史: → git log --oneline fb11f83 让 README.md 标题的首字母大写 0fd9dac 让标题微笑 7086650 添加 .gitignore b5773ad 设置相关资源文档标题 23f3c2b 添加相关资源文档 a454700 设置说明文档的标题 39975b3 初始化 “添加 .
我是一个android编程新手,在我的应用程序中,我使用recycleview来显示SQLite数据库的内容,我将数据库读入一个Arraylist,我在recycleview中显示它。我已经成功实现了向左滑动(删除项目)和向右滑动(编辑项目)功能。我在向左滑动时遇到了一个问题,这意味着在删除功能中,我实现了一个撤销功能: (SequenceItem 是我的自定义项类,sequenceItemLis
Git提供了多种修复你开发过程中的错误的方法. 方法的选择取决于你的情况: 包含有错误的文件是否提交了(commited); 如果你把它已经提交了, 那么你是否把有错误的提交已与其它人共享这也很重要. 修复未提交文件中的错误(重置) 如果你现在的工作目录(work tree)里搞的一团乱麻, 但是你现在还没有把它们提交; 你可以通过下面的命令, 让工作目录回到上次提交时的状态(last commi
问题内容: 我已经阅读了关于此的所有问题,但仍然没有找到答案。因此,请勿将其标记为重复项。 我正在将AngularFire与Angular 2和Typescript一起使用。我正在使用从端点提取24条最近记录的列表。这是我的代码: 如预期的那样,这将返回24个最新故事的列表,但是当我使用以下命令将它们呈现在页面上时: 它在顶部显示最旧的故事,在底部显示最新的故事。我了解为什么会这样,但我并不是说这
问题内容: 假设我有以下两个变量: 我怎样才能获得的价值是价值?也就是说,如何展开unicode格式,但保留十六进制的值? 如果我这样做: 那是不对的… 救命! 问题答案: U + 0000和U + 00FF之间的代码点以ISO 8859-1或Latin 1编码映射到相同的字节值。