Mega Code Archive

 
Categories / Java / Event
 

An application that shows the Action class in, well, action

/* Java Swing, 2nd Edition By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole ISBN: 0-596-00408-7 Publisher: O'Reilly  */ // ActionExampleSwing.java //An application that shows the Action class in, well, action. // import java.awt.BorderLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; public class ActionExampleSwing extends JFrame {   public static final int MIN_CHANNEL = 2;   public static final int MAX_CHANNEL = 13;   private int currentChannel = MIN_CHANNEL;   private int favoriteChannel = 9;   private JLabel channelLabel = new JLabel();   private Action upAction = new UpAction();   private Action downAction = new DownAction();   private GotoFavoriteAction gotoFavoriteAction = new GotoFavoriteAction();   private Action setFavoriteAction = new SetFavoriteAction();   public class UpAction extends AbstractAction {     public UpAction() {       putValue(NAME, "Channel Up");       putValue(SMALL_ICON, new ImageIcon("images/up.gif"));       putValue(SHORT_DESCRIPTION, "Increment the channel number");       putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_U));     }     public void actionPerformed(ActionEvent ae) {       setChannel(currentChannel + 1);     }   }   public class DownAction extends AbstractAction {     public DownAction() {       putValue(NAME, "Channel Down");       putValue(SMALL_ICON, new ImageIcon("images/down.gif"));       putValue(SHORT_DESCRIPTION, "Decrement the channel number");       putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_D));     }     public void actionPerformed(ActionEvent ae) {       setChannel(currentChannel - 1);     }   }   public class GotoFavoriteAction extends AbstractAction {     public GotoFavoriteAction() {       putValue(SMALL_ICON, new ImageIcon("images/fav.gif"));       putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_G));       updateProperties();     }     public void updateProperties() {       putValue(NAME, "Go to channel " + favoriteChannel);       putValue(SHORT_DESCRIPTION, "Change the channel to "           + favoriteChannel);     }     public void actionPerformed(ActionEvent ae) {       setChannel(favoriteChannel);     }   }   public class SetFavoriteAction extends AbstractAction {     public SetFavoriteAction() {       putValue(NAME, "Set 'Go to' channel");       putValue(SMALL_ICON, new ImageIcon("images/set.gif"));       putValue(SHORT_DESCRIPTION,           "Make current channel the Favorite channel");       putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_S));     }     public void actionPerformed(ActionEvent ae) {       favoriteChannel = currentChannel;       gotoFavoriteAction.updateProperties();       setEnabled(false);       gotoFavoriteAction.setEnabled(false);     }   }   public ActionExampleSwing() {     super("ActionExample Swing");     setChannel(currentChannel); // enable/disable the Actions as appropriate     channelLabel.setHorizontalAlignment(JLabel.CENTER);     channelLabel.setFont(new Font("Serif", Font.PLAIN, 32));     getContentPane().add(channelLabel, BorderLayout.NORTH);     JPanel buttonPanel = new JPanel(new GridLayout(2, 2, 16, 6));     buttonPanel.setBorder(BorderFactory.createEmptyBorder(6, 16, 16, 16));     getContentPane().add(buttonPanel, BorderLayout.CENTER);     buttonPanel.add(new JButton(upAction));     buttonPanel.add(new JButton(gotoFavoriteAction));     buttonPanel.add(new JButton(downAction));     buttonPanel.add(new JButton(setFavoriteAction));     JMenuBar mb = new JMenuBar();     JMenu menu = new JMenu("Channel");     menu.add(new JMenuItem(upAction));     menu.add(new JMenuItem(downAction));     menu.addSeparator();     menu.add(new JMenuItem(gotoFavoriteAction));     menu.add(new JMenuItem(setFavoriteAction));     mb.add(menu);     setJMenuBar(mb);   }   public void setChannel(int chan) {     currentChannel = chan;     channelLabel.setText("Now tuned to channel: " + currentChannel);     // enable/disable the Actions as appropriate     downAction.setEnabled(currentChannel > MIN_CHANNEL);     upAction.setEnabled(currentChannel < MAX_CHANNEL);     gotoFavoriteAction.setEnabled(currentChannel != favoriteChannel);     setFavoriteAction.setEnabled(currentChannel != favoriteChannel);   }   public static void main(String argv[]) {     JFrame f = new ActionExampleSwing();     f.setSize(400, 180);     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     f.setVisible(true);   } }