Java tutorial
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 MainClass extends JFrame { public static final int MIN_NUMBER = 2; public static final int MAX_NUMBER = 13; private int currentNumber = MIN_NUMBER; private int favoriteNumber = 9; private JLabel numberLabel = 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, "Number Add"); putValue(SMALL_ICON, new ImageIcon("images/up.gif")); putValue(SHORT_DESCRIPTION, "Increment the number"); putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_A)); } public void actionPerformed(ActionEvent ae) { setChannel(currentNumber + 1); } } public class DownAction extends AbstractAction { public DownAction() { putValue(NAME, "Number Down"); putValue(SMALL_ICON, new ImageIcon("images/down.gif")); putValue(SHORT_DESCRIPTION, "Decrement the number"); putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_D)); } public void actionPerformed(ActionEvent ae) { setChannel(currentNumber - 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 number " + favoriteNumber); putValue(SHORT_DESCRIPTION, "Change the number to " + favoriteNumber); } public void actionPerformed(ActionEvent ae) { setChannel(favoriteNumber); } } public class SetFavoriteAction extends AbstractAction { public SetFavoriteAction() { putValue(NAME, "Set 'Go to' number"); putValue(SMALL_ICON, new ImageIcon("images/set.gif")); putValue(SHORT_DESCRIPTION, "Make current number the Favorite number"); putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_S)); } public void actionPerformed(ActionEvent ae) { favoriteNumber = currentNumber; gotoFavoriteAction.updateProperties(); setEnabled(false); gotoFavoriteAction.setEnabled(false); } } public MainClass() { super(); setChannel(currentNumber); numberLabel.setHorizontalAlignment(JLabel.CENTER); numberLabel.setFont(new Font("Serif", Font.PLAIN, 32)); getContentPane().add(numberLabel, 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("Number"); 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) { currentNumber = chan; numberLabel.setText("Now tuned to number: " + currentNumber); downAction.setEnabled(currentNumber > MIN_NUMBER); upAction.setEnabled(currentNumber < MAX_NUMBER); gotoFavoriteAction.setEnabled(currentNumber != favoriteNumber); setFavoriteAction.setEnabled(currentNumber != favoriteNumber); } public static void main(String argv[]) { JFrame f = new MainClass(); f.setSize(400, 180); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }