初めて UndoManager を動作させようとしていますが、プロトタイプに問題がありました。次のコードで元に戻す操作が 1 つしかない理由がわかりません。
テキストを変更し、[元に戻す] をクリックしてテキストを再度変更すると、もう一度元に戻しても何も起こりません。キャッチはどこですか?
import java.awt.*;
import javax.swing.*;
public class IComeUndone
{
public static void main(String[] args)
{
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTextArea textArea = new JTextArea(20, 40);
textArea.setText("Back here");
f.add(textArea);
final UndoManager undoManager = new UndoManager();
textArea.getDocument().addUndoableEditListener(undoManager);
undoManager.setLimit(1000);
JButton undoB = new JButton("Undo");
undoB.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
undoManager.end();
if(undoManager.canUndo())
{
undoManager.undo();
}
textArea.requestFocus();
}
});
f.add(undoB, BorderLayout.PAGE_END);
f.pack();
f.setVisible(true);
}
}
更新: 行をコメントアウトすると正常に動作しますが、元に戻すundoManager.end();
をクリックするたびに、1 つの入力文字など、1 つの編集のみが元に戻されます。この時点で が理にかなっているように、単一の編集のグループを元に戻したかったのです。しかし、元に戻すが最初にクリックされた後、単一の編集の追跡を再開することはできません。(あなたが理解することを願って)undoManager.end();