Java by API/javax.swing.undo/AbstractUndoableEdit

Материал из Java эксперт
Перейти к: навигация, поиск

extends AbstractUndoableEdit

   <source lang="java">

import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JRadioButton; import javax.swing.JToggleButton; import javax.swing.undo.AbstractUndoableEdit; import javax.swing.undo.CannotRedoException; import javax.swing.undo.CannotUndoException; import javax.swing.undo.UndoableEdit; public class MainClass extends JFrame {

 private UndoableEdit edit;
 private JButton undoButton = new JButton("Undo");
 private JButton redoButton = new JButton("Redo");
 public MainClass() {
   JToggleButton tog = new JToggleButton("ToggleButton");
   JCheckBox cb = new JCheckBox("CheckBox");
   JRadioButton radio = new JRadioButton("RadioButton");
   SimpleListener sl = new SimpleListener();
   tog.addActionListener(sl);
   cb.addActionListener(sl);
   radio.addActionListener(sl);
   Box buttonBox = new Box(BoxLayout.Y_AXIS);
   buttonBox.add(tog);
   buttonBox.add(cb);
   buttonBox.add(radio);
   undoButton.setEnabled(false);
   redoButton.setEnabled(false);
   undoButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ev) {
       try {
         edit.undo();
       } catch (CannotUndoException ex) {
         ex.printStackTrace();
       } finally {
         undoButton.setEnabled(edit.canUndo());
         redoButton.setEnabled(edit.canRedo());
       }
     }
   });
   redoButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ev) {
       try {
         edit.redo();
       } catch (CannotRedoException ex) {
         ex.printStackTrace();
       } finally {
         undoButton.setEnabled(edit.canUndo());
         redoButton.setEnabled(edit.canRedo());
       }
     }
   });
   Box undoRedoBox = new Box(BoxLayout.X_AXIS);
   undoRedoBox.add(Box.createGlue());
   undoRedoBox.add(undoButton);
   undoRedoBox.add(Box.createHorizontalStrut(2));
   undoRedoBox.add(redoButton);
   undoRedoBox.add(Box.createGlue());
   Container content = getContentPane();
   content.setLayout(new BorderLayout());
   content.add(buttonBox, BorderLayout.CENTER);
   content.add(undoRedoBox, BorderLayout.SOUTH);
   setSize(400, 150);
 }
 public class SimpleListener implements ActionListener {
   public void actionPerformed(ActionEvent ev) {
     JToggleButton tb = (JToggleButton) ev.getSource();
     edit = new UndoableToggleEdit(tb);
     undoButton.setText(edit.getUndoPresentationName());
     redoButton.setText(edit.getRedoPresentationName());
     undoButton.getParent().validate();
     undoButton.setEnabled(edit.canUndo());
     redoButton.setEnabled(edit.canRedo());
   }
 }
 public static void main(String[] args) {
   JFrame f = new MainClass();
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   f.setVisible(true);
 }

} class UndoableToggleEdit extends AbstractUndoableEdit {

 private JToggleButton button;
 private boolean selected;
 // Create a new edit for a JToggleButton that has just been toggled.
 public UndoableToggleEdit(JToggleButton button) {
   this.button = button;
   selected = button.isSelected();
 }
 // Return a reasonable name for this edit.
 public String getPresentationName() {
   return "Toggle " + button.getText() + " " + (selected ? "on" : "off");
 }
 // Redo by setting the button state as it was initially.
 public void redo() throws CannotRedoException {
   super.redo();
   button.setSelected(selected);
 }
 // Undo by setting the button state to the opposite value.
 public void undo() throws CannotUndoException {
   super.undo();
   button.setSelected(!selected);
 }

}

      </source>