package com.quiltplayer.view.swing.buttons; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import javax.swing.JButton; /** * * @author Vlado Palczynski * */ public abstract class ScrollableButton extends JButton { protected static final long serialVersionUID = 1L; protected boolean moved; private int clickedYPosition; private int clickedXPosition; public ScrollableButton() { super(); setDefaults(); } private void setDefaults() { setOpaque(false); addMouseListener(new MouseAdapter() { /* * (non-Javadoc) * * @see java.awt.event.MouseAdapter#mouseReleased(java.awt.event.MouseEvent) */ @Override public void mouseReleased(MouseEvent e) { if (!moved) { triggerAction(); } else moved = false; } /* * (non-Javadoc) * * @see java.awt.event.MouseAdapter#mousePressed(java.awt.event.MouseEvent) */ @Override public void mousePressed(MouseEvent e) { moved = false; clickedYPosition = e.getYOnScreen(); clickedXPosition = e.getXOnScreen(); } }); /* * If dragged, a release shouldn't render a click. */ addMouseMotionListener(new MouseMotionAdapter() { /* * (non-Javadoc) * * @see java.awt.event.MouseMotionAdapter#mouseDragged(java.awt.event.MouseEvent) */ @Override public void mouseDragged(MouseEvent e) { int movement; movement = clickedYPosition - e.getYOnScreen(); if (movement >= 25 || movement <= -25) { moved = true; return; } movement = clickedXPosition - e.getXOnScreen(); if (movement >= 25 || movement <= -25) moved = true; } }); } protected abstract void triggerAction(); }