如何获取JTextPane的最后一个输入字?我不是要求JTextPane中字符串的最后一个字。我想按顺序将每个键入的单词存储在一个堆栈中,只是简单地将文本放在JTextPane上就不起作用了。
例如,我输入" Hello World"然后我添加"我的"在中间,导致了'Hello My World"。键入的最后一个单词是"我的",而不是" World"。
使用内置撤消的最新代码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.undo.UndoManager;
import javax.swing.JMenuBar;
import javax.swing.JTextPane;
import javax.swing.JFrame;
public class EditMenu{
private JMenuItem undo;
private JMenu editMenu;
private TextEditor editor;
private UndoManager manager;
public test(TextEditor t){
editor = t;
manager = new UndoManager();
buildEditMenu();
}
public JMenu getEditMenu(){
return editMenu;
}
private void buildEditMenu(){//create and add items to the edit menu
editMenu = new JMenu("Edit");
undo = new JMenuItem("Undo");
setKeyListeners();
editMenu.add(undo);
editMenuListeners();
}
private void setKeyListeners() {//add listener for CTRL Z
editor.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
if ((e.getKeyCode() == KeyEvent.VK_Z) && e.isControlDown()) {
undo();
}
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
});
}
private void editMenuListeners(){//create listeners for undo
undoItemListener();
}
private void undoItemListener() {
undo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
undo();
}
});
}
private void undo(){
if(manager.canUndo())
manager.undo();
else
System.out.println("cannot undo");
}
}
class TextEditor extends JTextPane{
public TextEditor(){
super();
}
private JMenuBar buildMenus() {//create and add all the JMenus to the JMenuBar
JMenuBar mb = new JMenuBar();
EditMenu editMenu = new EditMenu(this);
mb.add(editMenu.getEditMenu());
return mb;
}
public static void main(String[] args){
JFrame frame = new JFrame("Editor");
TextEditor editor = new TextEditor();
frame.setContentPane(editor);
frame.setJMenuBar(editor.buildMenus());//add the menu bar to the frame
frame.setSize(1200, 800);
frame.setDefaultCloseOperation(3);//exit on close
frame.setVisible(true);
}
}
答案 0 :(得分:0)
我正在为文本编辑器创建自己的撤消功能
这就是我认为你可能会做的事情。
你应该在你的问题中说明。告诉我们要求,以便我们了解您正在做什么,也许可以提供替代解决方案。
例如,您可以查看Compound Undo Manager。它尝试将字符编辑合并为块编辑,这基本上就是Word的工作方式。