如何在jtextpane中获取最后输入的单词?

时间:2015-11-27 21:52:05

标签: java string input jtextpane

如何获取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);
    }
}

1 个答案:

答案 0 :(得分:0)

  

我正在为文本编辑器创建自己的撤消功能

这就是我认为你可能会做的事情。

你应该在你的问题中说明。告诉我们要求,以便我们了解您正在做什么,也许可以提供替代解决方案。

例如,您可以查看Compound Undo Manager。它尝试将字符编辑合并为块编辑,这基本上就是Word的工作方式。