<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_by_API%2Fjavax.swing.undo%2FCompoundEdit</id>
		<title>Java by API/javax.swing.undo/CompoundEdit - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_by_API%2Fjavax.swing.undo%2FCompoundEdit"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_by_API/javax.swing.undo/CompoundEdit&amp;action=history"/>
		<updated>2026-04-23T12:18:47Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_by_API/javax.swing.undo/CompoundEdit&amp;diff=1895&amp;oldid=prev</id>
		<title> в 17:43, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_by_API/javax.swing.undo/CompoundEdit&amp;diff=1895&amp;oldid=prev"/>
				<updated>2010-05-31T17:43:48Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 17:43, 31 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_by_API/javax.swing.undo/CompoundEdit&amp;diff=1896&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_by_API/javax.swing.undo/CompoundEdit&amp;diff=1896&amp;oldid=prev"/>
				<updated>2010-05-31T14:38:19Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== CompoundEdit: canRedo() ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.Box;&lt;br /&gt;
import javax.swing.BoxLayout;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JCheckBox;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JRadioButton;&lt;br /&gt;
import javax.swing.JToggleButton;&lt;br /&gt;
import javax.swing.undo.AbstractUndoableEdit;&lt;br /&gt;
import javax.swing.undo.CannotRedoException;&lt;br /&gt;
import javax.swing.undo.CannotUndoException;&lt;br /&gt;
import javax.swing.undo.rupoundEdit;&lt;br /&gt;
import javax.swing.undo.UndoableEdit;&lt;br /&gt;
public class UndoableToggleApp2 extends JFrame {&lt;br /&gt;
  private CompoundEdit edit;&lt;br /&gt;
  private JButton undoButton = new JButton(&amp;quot;Undo&amp;quot;);&lt;br /&gt;
  private JButton redoButton = new JButton(&amp;quot;Redo&amp;quot;);&lt;br /&gt;
  private JButton endButton = new JButton(&amp;quot;End&amp;quot;);&lt;br /&gt;
  public UndoableToggleApp2() {&lt;br /&gt;
    JToggleButton tog = new JToggleButton(&amp;quot;ToggleButton&amp;quot;);&lt;br /&gt;
    JCheckBox cb = new JCheckBox(&amp;quot;CompoundEdit ExampleCheckBox&amp;quot;);&lt;br /&gt;
    JRadioButton radio = new JRadioButton(&amp;quot;RadioButton&amp;quot;);&lt;br /&gt;
    SimpleListener sl = new SimpleListener();&lt;br /&gt;
    tog.addActionListener(sl);&lt;br /&gt;
    cb.addActionListener(sl);&lt;br /&gt;
    radio.addActionListener(sl);&lt;br /&gt;
    Box buttonBox = new Box(BoxLayout.Y_AXIS);&lt;br /&gt;
    buttonBox.add(tog);&lt;br /&gt;
    buttonBox.add(cb);&lt;br /&gt;
    buttonBox.add(radio);&lt;br /&gt;
    &lt;br /&gt;
    undoButton.setEnabled(false);&lt;br /&gt;
    redoButton.setEnabled(false);&lt;br /&gt;
    endButton.setEnabled(false);&lt;br /&gt;
    undoButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent ev) {&lt;br /&gt;
        try {&lt;br /&gt;
          edit.undo();&lt;br /&gt;
        } catch (CannotUndoException ex) {&lt;br /&gt;
          ex.printStackTrace();&lt;br /&gt;
        } finally {&lt;br /&gt;
          undoButton.setEnabled(edit.canUndo());&lt;br /&gt;
          redoButton.setEnabled(edit.canRedo());&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    redoButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent ev) {&lt;br /&gt;
        try {&lt;br /&gt;
          edit.redo();&lt;br /&gt;
        } catch (CannotRedoException ex) {&lt;br /&gt;
          ex.printStackTrace();&lt;br /&gt;
        } finally {&lt;br /&gt;
          undoButton.setEnabled(edit.canUndo());&lt;br /&gt;
          redoButton.setEnabled(edit.canRedo());&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    endButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent ev) {&lt;br /&gt;
        edit.end();&lt;br /&gt;
        endButton.setEnabled(false);&lt;br /&gt;
        undoButton.setEnabled(edit.canUndo());&lt;br /&gt;
        redoButton.setEnabled(edit.canRedo());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    Box undoRedoEndBox = new Box(BoxLayout.X_AXIS);&lt;br /&gt;
    undoRedoEndBox.add(Box.createGlue());&lt;br /&gt;
    undoRedoEndBox.add(undoButton);&lt;br /&gt;
    undoRedoEndBox.add(Box.createHorizontalStrut(2));&lt;br /&gt;
    undoRedoEndBox.add(redoButton);&lt;br /&gt;
    undoRedoEndBox.add(Box.createHorizontalStrut(2));&lt;br /&gt;
    undoRedoEndBox.add(endButton);&lt;br /&gt;
    undoRedoEndBox.add(Box.createGlue());&lt;br /&gt;
    Container content = getContentPane();&lt;br /&gt;
    content.setLayout(new BorderLayout());&lt;br /&gt;
    content.add(buttonBox, BorderLayout.CENTER);&lt;br /&gt;
    content.add(undoRedoEndBox, BorderLayout.SOUTH);&lt;br /&gt;
    setSize(400, 150);&lt;br /&gt;
  }&lt;br /&gt;
  public class SimpleListener implements ActionListener {&lt;br /&gt;
    public void actionPerformed(ActionEvent ev) {&lt;br /&gt;
      if (edit == null || edit.isInProgress() == false)&lt;br /&gt;
        edit = new CompoundEdit();&lt;br /&gt;
      JToggleButton tb = (JToggleButton) ev.getSource();&lt;br /&gt;
      UndoableEdit togEdit = new UndoableToggleEdit(tb);&lt;br /&gt;
      edit.addEdit(togEdit);&lt;br /&gt;
      endButton.setEnabled(true);&lt;br /&gt;
      undoButton.setEnabled(edit.canUndo());&lt;br /&gt;
      redoButton.setEnabled(edit.canRedo());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // Main program just creates the frame and displays it.&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new UndoableToggleApp2();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class UndoableToggleEdit extends AbstractUndoableEdit {&lt;br /&gt;
  private JToggleButton button;&lt;br /&gt;
  private boolean selected;&lt;br /&gt;
  // Create a new edit for a JToggleButton that has just been toggled.&lt;br /&gt;
  public UndoableToggleEdit(JToggleButton button) {&lt;br /&gt;
    this.button = button;&lt;br /&gt;
    selected = button.isSelected();&lt;br /&gt;
  }&lt;br /&gt;
  // Return a reasonable name for this edit.&lt;br /&gt;
  public String getPresentationName() {&lt;br /&gt;
    return &amp;quot;Toggle &amp;quot; + button.getText() + &amp;quot; &amp;quot; + (selected ? &amp;quot;on&amp;quot; : &amp;quot;off&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  // Redo by setting the button state as it was initially.&lt;br /&gt;
  public void redo() throws CannotRedoException {&lt;br /&gt;
    super.redo();&lt;br /&gt;
    button.setSelected(selected);&lt;br /&gt;
  }&lt;br /&gt;
  // Undo by setting the button state to the opposite value.&lt;br /&gt;
  public void undo() throws CannotUndoException {&lt;br /&gt;
    super.undo();&lt;br /&gt;
    button.setSelected(!selected);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CompoundEdit: canUndo() ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.Box;&lt;br /&gt;
import javax.swing.BoxLayout;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JCheckBox;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JRadioButton;&lt;br /&gt;
import javax.swing.JToggleButton;&lt;br /&gt;
import javax.swing.undo.AbstractUndoableEdit;&lt;br /&gt;
import javax.swing.undo.CannotRedoException;&lt;br /&gt;
import javax.swing.undo.CannotUndoException;&lt;br /&gt;
import javax.swing.undo.rupoundEdit;&lt;br /&gt;
import javax.swing.undo.UndoableEdit;&lt;br /&gt;
public class UndoableToggleApp2 extends JFrame {&lt;br /&gt;
  private CompoundEdit edit;&lt;br /&gt;
  private JButton undoButton = new JButton(&amp;quot;Undo&amp;quot;);&lt;br /&gt;
  private JButton redoButton = new JButton(&amp;quot;Redo&amp;quot;);&lt;br /&gt;
  private JButton endButton = new JButton(&amp;quot;End&amp;quot;);&lt;br /&gt;
  public UndoableToggleApp2() {&lt;br /&gt;
    JToggleButton tog = new JToggleButton(&amp;quot;ToggleButton&amp;quot;);&lt;br /&gt;
    JCheckBox cb = new JCheckBox(&amp;quot;CompoundEdit ExampleCheckBox&amp;quot;);&lt;br /&gt;
    JRadioButton radio = new JRadioButton(&amp;quot;RadioButton&amp;quot;);&lt;br /&gt;
    SimpleListener sl = new SimpleListener();&lt;br /&gt;
    tog.addActionListener(sl);&lt;br /&gt;
    cb.addActionListener(sl);&lt;br /&gt;
    radio.addActionListener(sl);&lt;br /&gt;
    Box buttonBox = new Box(BoxLayout.Y_AXIS);&lt;br /&gt;
    buttonBox.add(tog);&lt;br /&gt;
    buttonBox.add(cb);&lt;br /&gt;
    buttonBox.add(radio);&lt;br /&gt;
    &lt;br /&gt;
    undoButton.setEnabled(false);&lt;br /&gt;
    redoButton.setEnabled(false);&lt;br /&gt;
    endButton.setEnabled(false);&lt;br /&gt;
    undoButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent ev) {&lt;br /&gt;
        try {&lt;br /&gt;
          edit.undo();&lt;br /&gt;
        } catch (CannotUndoException ex) {&lt;br /&gt;
          ex.printStackTrace();&lt;br /&gt;
        } finally {&lt;br /&gt;
          undoButton.setEnabled(edit.canUndo());&lt;br /&gt;
          redoButton.setEnabled(edit.canRedo());&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    redoButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent ev) {&lt;br /&gt;
        try {&lt;br /&gt;
          edit.redo();&lt;br /&gt;
        } catch (CannotRedoException ex) {&lt;br /&gt;
          ex.printStackTrace();&lt;br /&gt;
        } finally {&lt;br /&gt;
          undoButton.setEnabled(edit.canUndo());&lt;br /&gt;
          redoButton.setEnabled(edit.canRedo());&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    endButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent ev) {&lt;br /&gt;
        edit.end();&lt;br /&gt;
        endButton.setEnabled(false);&lt;br /&gt;
        undoButton.setEnabled(edit.canUndo());&lt;br /&gt;
        redoButton.setEnabled(edit.canRedo());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    Box undoRedoEndBox = new Box(BoxLayout.X_AXIS);&lt;br /&gt;
    undoRedoEndBox.add(Box.createGlue());&lt;br /&gt;
    undoRedoEndBox.add(undoButton);&lt;br /&gt;
    undoRedoEndBox.add(Box.createHorizontalStrut(2));&lt;br /&gt;
    undoRedoEndBox.add(redoButton);&lt;br /&gt;
    undoRedoEndBox.add(Box.createHorizontalStrut(2));&lt;br /&gt;
    undoRedoEndBox.add(endButton);&lt;br /&gt;
    undoRedoEndBox.add(Box.createGlue());&lt;br /&gt;
    Container content = getContentPane();&lt;br /&gt;
    content.setLayout(new BorderLayout());&lt;br /&gt;
    content.add(buttonBox, BorderLayout.CENTER);&lt;br /&gt;
    content.add(undoRedoEndBox, BorderLayout.SOUTH);&lt;br /&gt;
    setSize(400, 150);&lt;br /&gt;
  }&lt;br /&gt;
  public class SimpleListener implements ActionListener {&lt;br /&gt;
    public void actionPerformed(ActionEvent ev) {&lt;br /&gt;
      if (edit == null || edit.isInProgress() == false)&lt;br /&gt;
        edit = new CompoundEdit();&lt;br /&gt;
      JToggleButton tb = (JToggleButton) ev.getSource();&lt;br /&gt;
      UndoableEdit togEdit = new UndoableToggleEdit(tb);&lt;br /&gt;
      edit.addEdit(togEdit);&lt;br /&gt;
      endButton.setEnabled(true);&lt;br /&gt;
      undoButton.setEnabled(edit.canUndo());&lt;br /&gt;
      redoButton.setEnabled(edit.canRedo());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // Main program just creates the frame and displays it.&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new UndoableToggleApp2();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class UndoableToggleEdit extends AbstractUndoableEdit {&lt;br /&gt;
  private JToggleButton button;&lt;br /&gt;
  private boolean selected;&lt;br /&gt;
  // Create a new edit for a JToggleButton that has just been toggled.&lt;br /&gt;
  public UndoableToggleEdit(JToggleButton button) {&lt;br /&gt;
    this.button = button;&lt;br /&gt;
    selected = button.isSelected();&lt;br /&gt;
  }&lt;br /&gt;
  // Return a reasonable name for this edit.&lt;br /&gt;
  public String getPresentationName() {&lt;br /&gt;
    return &amp;quot;Toggle &amp;quot; + button.getText() + &amp;quot; &amp;quot; + (selected ? &amp;quot;on&amp;quot; : &amp;quot;off&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  // Redo by setting the button state as it was initially.&lt;br /&gt;
  public void redo() throws CannotRedoException {&lt;br /&gt;
    super.redo();&lt;br /&gt;
    button.setSelected(selected);&lt;br /&gt;
  }&lt;br /&gt;
  // Undo by setting the button state to the opposite value.&lt;br /&gt;
  public void undo() throws CannotUndoException {&lt;br /&gt;
    super.undo();&lt;br /&gt;
    button.setSelected(!selected);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CompoundEdit: undo() ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.Box;&lt;br /&gt;
import javax.swing.BoxLayout;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JCheckBox;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JRadioButton;&lt;br /&gt;
import javax.swing.JToggleButton;&lt;br /&gt;
import javax.swing.undo.AbstractUndoableEdit;&lt;br /&gt;
import javax.swing.undo.CannotRedoException;&lt;br /&gt;
import javax.swing.undo.CannotUndoException;&lt;br /&gt;
import javax.swing.undo.rupoundEdit;&lt;br /&gt;
import javax.swing.undo.UndoableEdit;&lt;br /&gt;
public class UndoableToggleApp2 extends JFrame {&lt;br /&gt;
  private CompoundEdit edit;&lt;br /&gt;
  private JButton undoButton = new JButton(&amp;quot;Undo&amp;quot;);&lt;br /&gt;
  private JButton redoButton = new JButton(&amp;quot;Redo&amp;quot;);&lt;br /&gt;
  private JButton endButton = new JButton(&amp;quot;End&amp;quot;);&lt;br /&gt;
  public UndoableToggleApp2() {&lt;br /&gt;
    JToggleButton tog = new JToggleButton(&amp;quot;ToggleButton&amp;quot;);&lt;br /&gt;
    JCheckBox cb = new JCheckBox(&amp;quot;CompoundEdit ExampleCheckBox&amp;quot;);&lt;br /&gt;
    JRadioButton radio = new JRadioButton(&amp;quot;RadioButton&amp;quot;);&lt;br /&gt;
    SimpleListener sl = new SimpleListener();&lt;br /&gt;
    tog.addActionListener(sl);&lt;br /&gt;
    cb.addActionListener(sl);&lt;br /&gt;
    radio.addActionListener(sl);&lt;br /&gt;
    Box buttonBox = new Box(BoxLayout.Y_AXIS);&lt;br /&gt;
    buttonBox.add(tog);&lt;br /&gt;
    buttonBox.add(cb);&lt;br /&gt;
    buttonBox.add(radio);&lt;br /&gt;
    &lt;br /&gt;
    undoButton.setEnabled(false);&lt;br /&gt;
    redoButton.setEnabled(false);&lt;br /&gt;
    endButton.setEnabled(false);&lt;br /&gt;
    undoButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent ev) {&lt;br /&gt;
        try {&lt;br /&gt;
          edit.undo();&lt;br /&gt;
        } catch (CannotUndoException ex) {&lt;br /&gt;
          ex.printStackTrace();&lt;br /&gt;
        } finally {&lt;br /&gt;
          undoButton.setEnabled(edit.canUndo());&lt;br /&gt;
          redoButton.setEnabled(edit.canRedo());&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    redoButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent ev) {&lt;br /&gt;
        try {&lt;br /&gt;
          edit.redo();&lt;br /&gt;
        } catch (CannotRedoException ex) {&lt;br /&gt;
          ex.printStackTrace();&lt;br /&gt;
        } finally {&lt;br /&gt;
          undoButton.setEnabled(edit.canUndo());&lt;br /&gt;
          redoButton.setEnabled(edit.canRedo());&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    endButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent ev) {&lt;br /&gt;
        edit.end();&lt;br /&gt;
        endButton.setEnabled(false);&lt;br /&gt;
        undoButton.setEnabled(edit.canUndo());&lt;br /&gt;
        redoButton.setEnabled(edit.canRedo());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    Box undoRedoEndBox = new Box(BoxLayout.X_AXIS);&lt;br /&gt;
    undoRedoEndBox.add(Box.createGlue());&lt;br /&gt;
    undoRedoEndBox.add(undoButton);&lt;br /&gt;
    undoRedoEndBox.add(Box.createHorizontalStrut(2));&lt;br /&gt;
    undoRedoEndBox.add(redoButton);&lt;br /&gt;
    undoRedoEndBox.add(Box.createHorizontalStrut(2));&lt;br /&gt;
    undoRedoEndBox.add(endButton);&lt;br /&gt;
    undoRedoEndBox.add(Box.createGlue());&lt;br /&gt;
    Container content = getContentPane();&lt;br /&gt;
    content.setLayout(new BorderLayout());&lt;br /&gt;
    content.add(buttonBox, BorderLayout.CENTER);&lt;br /&gt;
    content.add(undoRedoEndBox, BorderLayout.SOUTH);&lt;br /&gt;
    setSize(400, 150);&lt;br /&gt;
  }&lt;br /&gt;
  public class SimpleListener implements ActionListener {&lt;br /&gt;
    public void actionPerformed(ActionEvent ev) {&lt;br /&gt;
      if (edit == null || edit.isInProgress() == false)&lt;br /&gt;
        edit = new CompoundEdit();&lt;br /&gt;
      JToggleButton tb = (JToggleButton) ev.getSource();&lt;br /&gt;
      UndoableEdit togEdit = new UndoableToggleEdit(tb);&lt;br /&gt;
      edit.addEdit(togEdit);&lt;br /&gt;
      endButton.setEnabled(true);&lt;br /&gt;
      undoButton.setEnabled(edit.canUndo());&lt;br /&gt;
      redoButton.setEnabled(edit.canRedo());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // Main program just creates the frame and displays it.&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new UndoableToggleApp2();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class UndoableToggleEdit extends AbstractUndoableEdit {&lt;br /&gt;
  private JToggleButton button;&lt;br /&gt;
  private boolean selected;&lt;br /&gt;
  // Create a new edit for a JToggleButton that has just been toggled.&lt;br /&gt;
  public UndoableToggleEdit(JToggleButton button) {&lt;br /&gt;
    this.button = button;&lt;br /&gt;
    selected = button.isSelected();&lt;br /&gt;
  }&lt;br /&gt;
  // Return a reasonable name for this edit.&lt;br /&gt;
  public String getPresentationName() {&lt;br /&gt;
    return &amp;quot;Toggle &amp;quot; + button.getText() + &amp;quot; &amp;quot; + (selected ? &amp;quot;on&amp;quot; : &amp;quot;off&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  // Redo by setting the button state as it was initially.&lt;br /&gt;
  public void redo() throws CannotRedoException {&lt;br /&gt;
    super.redo();&lt;br /&gt;
    button.setSelected(selected);&lt;br /&gt;
  }&lt;br /&gt;
  // Undo by setting the button state to the opposite value.&lt;br /&gt;
  public void undo() throws CannotUndoException {&lt;br /&gt;
    super.undo();&lt;br /&gt;
    button.setSelected(!selected);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>