Java Swingで文字サイズ、色変更などいろいろな機能のついたテキストエディタを作っています。
いろいろサイトをまわったりAPIリファレンスを見たりしたんですがUndo/Redo機能のつけ方がどうしてもわかりません。教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

Swing には undo パッケージがありますので、テキストエディターならば基本的にはこれを使うだけで実現可能です。


JDK に付属するサンプルとして JDK をインストールしたフォルダーの下に demo/jfc/Stylepad というフォルダーがあり、そこには文字の編集や色の変更の undo/redo ができるサンプルコードがあります。このサンプルも上記の undo パッケージを使っているはずです。
ただ、undo/redo の概念は、通常のロジックに比べてかなり高度ですので、理解にはかなりのコストがかかります。

参考URL:http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …
    • good
    • 0
この回答へのお礼

サンプルコード見ましたが自分の力では理解が難しい内容でした。今後じっくりと理解しようと思います。
解決しました。ありがとうございます。

お礼日時:2005/04/03 07:41

多分、


自分(自前)で、実行前の状態やコマンドを(再現できるように)保存しておく必要があると思います。

この回答への補足

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);
}
}

具体的にどうやってやるのかをこれにコードを加えて説明していただけたら幸いです。
初心者で申し訳ありません。

補足日時:2005/04/02 15:38
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2005/04/02 15:36

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報