2012-01-21 7 views
-1

私はJTabbedPane内のいくつかのコンポーネントを表示することができるアプリケーション内で基本エディタを開発しています。各タブには、JEditorPaneを含むJScrollPaneが保持されます。タブ付きJEditorPanesの取り消し/やり直しを実装する

ここで、元に戻しとやり直し機能を実装したいと思います。そのため、ツールバーの[元に戻す]または[やり直し]ボタンを押すか、定義されたキーストロークを使用すると、UndoManagerは現在表示されているドキュメントの最後の編集を元に戻したりやり直したりします。

this oneのような1つのドキュメントまたはテキストコンポーネントに対してこれを行う方法についてはいくつかのチュートリアルがありますが、完全なドキュメントスタックではありません。あなたはなにか考えはありますか。

私は以下を試みました。私は

class UndoHandler implements UndoableEditListener { 

    public void undoableEditHappened(UndoableEditEvent e) { 
     undoManager.addEdit(e.getEdit()); 
     undoAction.update(); 
     redoAction.update(); 
    } 
} 

class UndoAction extends AbstractAction { 
    public UndoAction() { 
     super("Undo"); 
     setEnabled(false); 
    } 

    public void actionPerformed(ActionEvent e) { 
     try { 
      undoManager.undo(); 
     } catch (CannotUndoException ex) { 
      ex.printStackTrace(); 
     } 

     update(); 
     redoAction.update(); 
    } 

    protected void update() { 
     if (undoManager.canUndo()) { 
      setEnabled(true); 
      putValue(Action.NAME, undoManager.getUndoPresentationName()); 
     } else { 
      setEnabled(false); 
      putValue(Action.NAME, "Undo"); 
     } 
    } 
} 

class RedoAction extends AbstractAction { 
    public RedoAction() { 
     super("Redo"); 
     setEnabled(false); 
    } 

    public void actionPerformed(ActionEvent e) { 
     try { 
      undoManager.redo(); 
     } catch (CannotRedoException ex) { 
      ex.printStackTrace(); 
     } 

     update(); 
     undoAction.update(); 
    } 

    protected void update() { 
     if (undoManager.canRedo()) { 
      setEnabled(true); 
      putValue(Action.NAME, undoManager.getRedoPresentationName()); 
     } else { 
      setEnabled(false); 
      putValue(Action.NAME, "Redo"); 
     } 
    } 
} 

...、このようUndoHandler、元に戻すとRedoActionを実装し...と、このような各文書に割り当てられた:

 // Fetch the under laying document ... 
     ObjDocument doc = (ObjDocument) editor.getDocument(); 

     // ... and assign the undo listener. 
     doc.addUndoableEditListener(undoHandler); 

おかげ&敬具

アンドレアス

+2

アン[SSCCE](http://sscce.org)が大幅に役立つだろう。 –

+1

私は理解しません、それはドキュメントの束のために同じだろう。それぞれは独自の 'UndoManager'と' UndoHandler'を取得します。 – stryba

+0

最近のテストを追加しました。しかし、私はあなたが意味することを理解していません。あなたは簡単な例を挙げることができますか? – Phidelux

答えて

0
+0

このリンクをありがとうございますが、私はすでにコマンドパターンを知っています。この場合、基本的なテキスト操作を元に戻してやり直したいからです。この機能はすでにテキストコンポーネントに実装されています。私はちょうど同時に複数の文書でそれを使う方法を知らない。 – Phidelux

+0

ええと、申し訳ありませんが、急いで、慎重に読んでいない.. :) –

関連する問題