Mega Code Archive

 
Categories / Java / Swing JFC
 

Sharing an Action between JButton Components

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JToolBar; public class ActionTester {   static class MyAction extends AbstractAction {     public MyAction(String name, Icon icon) {       super(name, icon);     }     public void actionPerformed(ActionEvent e) {       System.out.println("Selected: " + getValue(Action.NAME));     }   }   public static void main(String args[]) {     JFrame f = new JFrame();     Container pane = f.getContentPane();     Icon icon = new RedOvalIcon();     final Action action = new MyAction("Hello", icon);     // Add tooltip     action.putValue(Action.SHORT_DESCRIPTION, "World");     JToolBar jt1 = new JToolBar();     JButton b1 = new JButton(action);     jt1.add(b1);     pane.add(jt1, BorderLayout.NORTH);     JToolBar jt2 = new JToolBar();     JButton b2 = new JButton(action);     jt2.add(b2);     pane.add(jt2, BorderLayout.SOUTH);     JButton jb = new JButton("Toggle Action");     jb.addActionListener(new ActionListener() {       public void actionPerformed(ActionEvent e) {         action.setEnabled(!action.isEnabled());       }     });     pane.add(jb, BorderLayout.CENTER);     f.setSize(200, 200);     f.show();   }   static class RedOvalIcon implements Icon {     public void paintIcon(Component c, Graphics g, int x, int y) {       g.setColor(Color.RED);       if (c.isEnabled()) {         g.fillOval(x, y, getIconWidth(), getIconHeight());       } else {         g.drawOval(x, y, getIconWidth(), getIconHeight());       }     }     public int getIconWidth() {       return 20;     }     public int getIconHeight() {       return 30;     }   } }