event
Action Class example
With this example we shall show you how to work with Action class in Java. In many ways the use of the Action
class is pretty much the same as the use of the ActionListener
interface.
With Action
class you can monitor a number of events in a component and customize the behavior of your application when a specific event occurs. The action class is very flexible because you can construct a number of classes that extend AbstractAction
and customize your own Action
and your own events you wish to monitor.
Basically, all you have to do in order to work with Action
class is:
- Create a number of classes that extend the
AbstractAction
class. - Override the
actionPerformed
to customize the handling of a specific event. - Use the
putValue
method to set the specific values of different parameters to further customize the events you want to handle.
Let’s see the code snippets that follow:
package com.javacodegeeks.snippets.desktop; 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 Main extends JFrame { private int gotoChannel = 5; private JLabel channelLabel = new JLabel(); public static final int Min_Channel = 2; private int curr_chanel = Min_Channel; private Action incrAction = new Increase(); public static final int MAX_CHANNEL = 20; private Action decrAction = new Decrese(); private GotoAction gotoAction = new GotoAction(); private Action setGoToAction = new SetGoToAction(); public class Increase extends AbstractAction { public Increase() { putValue(NAME, "Increase"); putValue(SHORT_DESCRIPTION, "Increment the number"); putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_U)); } @Override public void actionPerformed(ActionEvent ae) { setChannel(curr_chanel + 1); } } public class Decrese extends AbstractAction { public Decrese() { putValue(NAME, "Decrease"); putValue(SHORT_DESCRIPTION, "Decrement the number"); putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_D)); } @Override public void actionPerformed(ActionEvent ae) { setChannel(curr_chanel - 1); } } public class GotoAction extends AbstractAction { public GotoAction() { putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_G)); update(); } public void update() { putValue(NAME, "Go to " + gotoChannel); putValue(SHORT_DESCRIPTION, "Change to " + gotoChannel); } @Override public void actionPerformed(ActionEvent ae) { setChannel(gotoChannel); } } public class SetGoToAction extends AbstractAction { public SetGoToAction() { putValue(NAME, "Set 'Go to' number"); putValue(SHORT_DESCRIPTION,"Make current number the goto channel"); putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_S)); } @Override public void actionPerformed(ActionEvent ae) { gotoChannel = curr_chanel; gotoAction.update(); setEnabled(false); gotoAction.setEnabled(false); } } public Main() { super(""); setChannel(curr_chanel); channelLabel.setHorizontalAlignment(JLabel.CENTER); channelLabel.setFont(new Font("Serif", Font.PLAIN, 42)); getContentPane().add(channelLabel, BorderLayout.NORTH); JPanel buttonPanel = new JPanel(new GridLayout(4, 4, 36, 66)); buttonPanel.setBorder(BorderFactory.createEmptyBorder(6, 16, 16, 16)); getContentPane().add(buttonPanel, BorderLayout.CENTER); buttonPanel.add(new JButton(incrAction)); buttonPanel.add(new JButton(gotoAction)); buttonPanel.add(new JButton(decrAction)); buttonPanel.add(new JButton(setGoToAction)); JMenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu("Number"); menu.add(new JMenuItem(incrAction)); menu.add(new JMenuItem(decrAction)); menu.addSeparator(); menu.add(new JMenuItem(gotoAction)); menu.add(new JMenuItem(setGoToAction)); menuBar.add(menu); setJMenuBar(menuBar); } public void setChannel(int chan) { curr_chanel = chan; channelLabel.setText("Number is: " + curr_chanel); decrAction.setEnabled(curr_chanel > Min_Channel); incrAction.setEnabled(curr_chanel < MAX_CHANNEL); gotoAction.setEnabled(curr_chanel != gotoChannel); setGoToAction.setEnabled(curr_chanel != gotoChannel); } public static void main(String argv[]) { JFrame Jframe = new Main(); Jframe.setSize(800, 600); Jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Jframe.setVisible(true); } }
This was an example on how to use the Action class in Java.