【发布时间】:2015-11-27 21:52:04
【问题描述】:
如何获取 JTextPane 的最后输入的单词?我不要求 JTextPane 中字符串的最后一个字。我想最后将每个键入的单词按顺序存储在堆栈中,而仅仅在 JTextPane 上获取文本是行不通的。
例如,我输入“Hello World”,然后在中间添加“My”,结果是“Hello My World”。最后输入的单词是“My”,而不是“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);
}
}
【问题讨论】:
-
你的要求不够详细。如果您键入:“Helo World”会怎样?那是给你两个字吗?然后您意识到您忘记了第二个“l”并返回修复“Hello”这是否意味着您知道有 3 个单词“Helo”、“World”、“Hello”?如果在中间粘贴一些文本怎么办?那是一个词还是您需要解析文本中的词?如果您键入“wor ld”然后删除“”怎么办?你有 3 个词“wor”,“ld”“world”。这样做的真正意义是什么?
-
啊,好点,我完全忘记了。那么在这种情况下,我想我会将最新的字符添加到文本窗格中,无论是输入还是粘贴。我正在为文本编辑器创建自己的撤消功能。现在我可以撤消字符串的最后一个单词,但这不是正确的功能。
标签: java string input jtextpane