- ベストアンサー
Undo/Redo機能について
Java Swingで文字サイズ、色変更などいろいろな機能のついたテキストエディタを作っています。 いろいろサイトをまわったりAPIリファレンスを見たりしたんですがUndo/Redo機能のつけ方がどうしてもわかりません。教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Swing には undo パッケージがありますので、テキストエディターならば基本的にはこれを使うだけで実現可能です。 JDK に付属するサンプルとして JDK をインストールしたフォルダーの下に demo/jfc/Stylepad というフォルダーがあり、そこには文字の編集や色の変更の undo/redo ができるサンプルコードがあります。このサンプルも上記の undo パッケージを使っているはずです。 ただ、undo/redo の概念は、通常のロジックに比べてかなり高度ですので、理解にはかなりのコストがかかります。
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
多分、 自分(自前)で、実行前の状態やコマンドを(再現できるように)保存しておく必要があると思います。
お礼
回答ありがとうございます。
補足
public class UndoText extends JFrame implements ActionListener{ protected JMenuBar menubar; protected JMenu editMenu; protected JMenuItem undoItem; protected JMenuItem redoItem; protected JMenuItem exitItem; protected JTextPane textPane; public UndoText() { menubar = new JMenuBar(); editMenu = new JMenu("編集"); menubar.add(editMenu); undoItem = new JMenuItem("元に戻す"); undoItem.addActionListener(this); undoItem.setActionCommand("undo"); redoItem = new JMenuItem("やり直す"); redoItem.addActionListener(this); redoItem.setActionCommand("redo"); editMenu.add(undoItem); editMenu.add(redoItem); editMenu.addSeparator(); exitItem = new JMenuItem("閉じる"); exitItem.addActionListener(this); exitItem.setActionCommand("exit"); editMenu.add(exitItem); setJMenuBar(menubar); textPane = new JTextPane(); JScrollPane scroll = new JScrollPane(textPane, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); getContentPane().add(scroll, BorderLayout.CENTER); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public void actionPerformed(ActionEvent e) { String actionCommand = e.getActionCommand(); if(actionCommand.equals("exit")) { System.exit(0); } } public static void main(String args[]) { UndoText app = new UndoText(); app.setSize(800, 500); app.setVisible(true); } } 具体的にどうやってやるのかをこれにコードを加えて説明していただけたら幸いです。 初心者で申し訳ありません。
お礼
サンプルコード見ましたが自分の力では理解が難しい内容でした。今後じっくりと理解しようと思います。 解決しました。ありがとうございます。