6

に取り消し機能を実装しようとしていJTextAreaます。チュートリアルのためにグーグルで検索し、チュートリアルの1つに従い、以下のコードを記述しました。Ctrl + Zキーを押すと、イベントがトリガーされます。それは私のために働いていません。私は何かが足りないのですか?

private void undoActionPerformed(java.awt.event.ActionEvent evt) {
    Document doc = editorTextArea.getDocument();
    final UndoManager undo = new UndoManager();

    doc.addUndoableEditListener(new UndoableEditListener() {
        @Override
        public void undoableEditHappened(UndoableEditEvent e) {
            undo.addEdit(e.getEdit());
        }
    });
}
4

2 に答える 2

18

あなたの例から、あなたがどれだけのことをしたかを知るのは難しいですが、私はこれを機能させることができました...

private UndoManager undoManager;

// In the constructor

undoManager = new UndoManager();
Document doc = textArea.getDocument();
doc.addUndoableEditListener(new UndoableEditListener() {
    @Override
    public void undoableEditHappened(UndoableEditEvent e) {

        System.out.println("Add edit");
        undoManager.addEdit(e.getEdit());

    }
});

InputMap im = textArea.getInputMap(JComponent.WHEN_FOCUSED);
ActionMap am = textArea.getActionMap();

im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "Undo");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Y, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "Redo");

am.put("Undo", new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent e) {
        try {
            if (undoManager.canUndo()) {
                undoManager.undo();
            }
        } catch (CannotUndoException exp) {
            exp.printStackTrace();
        }
    }
});
am.put("Redo", new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent e) {
        try {
            if (undoManager.canRedo()) {
                undoManager.redo();
            }
        } catch (CannotUndoException exp) {
            exp.printStackTrace();
        }
    }
});
于 2012-08-20T00:14:07.587 に答える
-1

よくわかりませんが、GUIにKeyListenerを追加できない可能性があります。
例えば;

class Example implements KeyListener{

  .
  .
  .

  this.addKeyListener(this); // if want to add key listener for main container

  .
  .
  .

}

これは、キーリスナーの使用方法についてです。

于 2012-08-19T23:45:23.813 に答える