package com.opticalcobra.storybear.menu; import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import com.opticalcobra.storybear.menu.Menu; import com.opticalcobra.storybear.res.Ressources; public class MenuButton extends JButton implements MouseListener { private ActionListener action; private ImageIcon iconNormal, iconHover, iconDisabled; public MenuButton(int x, int y, BufferedImage normal, BufferedImage hover, BufferedImage disabled) { setBounds((int)(x/Ressources.SCALE), (int)(y/Ressources.SCALE), normal.getWidth(), normal.getHeight()); iconNormal = new ImageIcon(normal); iconHover = new ImageIcon(hover); iconDisabled = new ImageIcon(disabled); enable(); setBorder(null); setBorderPainted(false); setContentAreaFilled(false); setCursor(Ressources.CURSORCLICKABLE); } public MenuButton(int x, int y, BufferedImage normal, BufferedImage hover, BufferedImage disabled, Menu object, JComponent innerComp) { this(x, y, normal, hover, disabled); action = new PanelSwitcher(object, innerComp); addActionListener(action); } public MenuButton(int x, int y, BufferedImage normal, BufferedImage hover, BufferedImage disabled, Menu object, String method) { this(x, y, normal, hover, disabled); action = new MethodCaller(object, method); addActionListener(action); } public void disable() { removeActionListener(action); setRolloverIcon(null); setIcon(iconDisabled); setCursor(Ressources.CURSORNORMAL); } public void enable() { addActionListener(action); setRolloverIcon(iconHover); setIcon(iconNormal); setCursor(Ressources.CURSORCLICKABLE); } @Override public void mouseClicked(MouseEvent e) {} @Override public void mouseEntered(MouseEvent e) {} @Override public void mouseExited(MouseEvent e) {} @Override public void mousePressed(MouseEvent e) {} @Override public void mouseReleased(MouseEvent e) {} protected class PanelSwitcher implements ActionListener { JComponent innerComp; Menu object; public PanelSwitcher(Menu object2, JComponent innerComp) { this.innerComp = innerComp; this.object = object2; } @Override public void actionPerformed(ActionEvent arg0) { object.getMain().setVisible(false); object.setMain(innerComp); object.getMain().setVisible(true); } } protected class MethodCaller implements ActionListener { Object object; Method method; public MethodCaller(Object object, String method) { this.object = object; try { this.method = object.getClass().getMethod(method, null); } catch (NoSuchMethodException | SecurityException e) { e.printStackTrace(); } } @Override public void actionPerformed(ActionEvent arg0) { try { method.invoke(object, null); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); } } } }