MainClass.java Source code

Java tutorial

Introduction

Here is the source code for MainClass.java

Source

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