Java tutorial
/* 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); } }