編集:投稿の最後を見てください...
始めに、私の下手な英語を許してください...
JTabbedPane を使用して複数のファイルを編集し、Java でテキスト エディターを作成しようとしています。その場合に UndoManager を使用するための適切なヘルプがインターネット上に見つかりませんでした。
だから私は何かを試しましたが、うまくいかないようです。
実際に、タブを変更するときに聞いて、すべての UndoableEdit を保存しようとしました。タブを変更するときは、以前に開いていたタブの UndoableEdits を保存してから、UndoManager の編集内容を消去し、最後に新しいアクティブなタブの UndoableEdits を復元します。
私が抱えている問題は、元に戻す/やり直しボタンの状態を更新する関数を呼び出すと、canUndo()/canRedo() メソッドが常に false を返すことですが、リストに編集があります...なぜなのかわかりませんこれが起こる、私は何をするのを忘れたのか理解できません...
明らかに、「編集」ベクトルに UndoableEdits が存在していても、UndoManager はこれを気にしません。ボタンを強制的に有効にしようとすると、例外がスローされます... (javax.swing.undo.CannotUndoException / javax.swing.undo.CannotRedoException)
私を手伝ってくれますか ?
さらに詳しい情報が必要な場合は、遠慮なくお尋ねください。
ありがとうございました。
UndoManager クラスの私の拡張:
public class UndoManagerPerso extends UndoManager
{
private static final long serialVersionUID = 8386145389216281754L;
public ArrayList<UndoableEdit> getEdits()
{
ArrayList<UndoableEdit> listEdits = new ArrayList<UndoableEdit>();
listEdits.addAll(this.edits);
return listEdits;
}
public void setEdits(ArrayList<UndoableEdit> listEdits)
{
for(UndoableEdit ue:listEdits)
{
this.addEdit(ue);
}
}
}
私のメインウィンドウのクラスでのこれらの関数の呼び出し:
tabbedPane_editeur.addChangeListener(new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent e)
{
if (e.getSource() instanceof JTabbedPane)
{
JTabbedPane pane = (JTabbedPane) e.getSource();
int previousTab = f_principale.this.activeTab;
int activeTab = pane.getSelectedIndex();
System.out.println("Selected paneNo : " + pane.getSelectedIndex() + ", précédent : " + previousTab);
f_principale.this.listEditeurs.get(previousTab).setListEdits( f_principale.this.undoManager.getEdits());
f_principale.this.undoManager.setEdits(f_principale.this.listEditeurs.get(activeTab).getListEdits());
f_principale.this.activeTab = activeTab;
f_principale.this.updateButtons();
}
}
});
public void updateButtons()
{
this.btnUndo.setText(undoManager.getUndoPresentationName());
this.btnRedo.setText(undoManager.getRedoPresentationName());
this.btnUndo.setEnabled(undoManager.canUndo());//returns false
this.btnRedo.setEnabled(undoManager.canRedo());//returns false
}
編集 : (1 日後) 今日 UndoManader をもう一度テストしたところ、何かに気づきました。実際、手動で挿入すると UndoableEdit が機能します。しかし、編集数の増加が速すぎて正常ではありません...
私はすぐにデフォルトの制限 (100) に達したので、昨日はまったく機能していないと思いました: 制限に達すると、canUndo() / canRedo() は false を返し、ボタンが強制的に有効になると、例外がスローされます。
タブを切り替えると、何か問題が発生する可能性があります...しかし、何ですか?何か考えはありますか?私はこれを見てみるつもりです...