Because I'm sick of unforgiving clicks.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@855 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
//
|
||||
// $Id: MouseArmingAdapter.java,v 1.1 2002/10/01 17:31:14 ray Exp $
|
||||
|
||||
package com.samskivert.swing;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.Shape;
|
||||
import java.awt.event.MouseEvent;
|
||||
import javax.swing.event.MouseInputAdapter;
|
||||
|
||||
/**
|
||||
* A mouse arming adapter is a MouseAdapter that translates 'sloppy'
|
||||
* clicks into a call to mouseClicked, as well as provides
|
||||
* a method that can be used to draw a component as armed or not.
|
||||
*/
|
||||
public abstract class MouseArmingAdapter
|
||||
{
|
||||
/**
|
||||
* Construct a simple MouseArmingAdapter on the specified component.
|
||||
*/
|
||||
public MouseArmingAdapter (Component component)
|
||||
{
|
||||
this(component, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a MouseArmingAdapter with the specified active area
|
||||
* within the component.
|
||||
*/
|
||||
public MouseArmingAdapter (final Component component, final Shape bounds)
|
||||
{
|
||||
MouseInputAdapter mia = new MouseInputAdapter() {
|
||||
|
||||
// documentation inherited
|
||||
public void mousePressed (MouseEvent e)
|
||||
{
|
||||
if (button1(e) && contains(e)) {
|
||||
_armed = _startedArmed = true;
|
||||
setArmed(true);
|
||||
}
|
||||
}
|
||||
|
||||
// documentation inherited
|
||||
public void mouseReleased (MouseEvent e)
|
||||
{
|
||||
if (button1(e)) {
|
||||
if (_armed && contains(e)) {
|
||||
clicked();
|
||||
}
|
||||
_startedArmed = _armed = false;
|
||||
}
|
||||
}
|
||||
|
||||
// documentation inherited
|
||||
public void mouseDragged (MouseEvent e)
|
||||
{
|
||||
if (_startedArmed && (contains(e) != _armed)) {
|
||||
_armed = !_armed;
|
||||
setArmed(_armed);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the specified mouse event within the active area?
|
||||
*/
|
||||
protected boolean contains (MouseEvent e)
|
||||
{
|
||||
if (bounds != null) {
|
||||
return bounds.contains(e.getX(), e.getY());
|
||||
} else {
|
||||
return component.contains(e.getX(), e.getY());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Was the first mouse button used?
|
||||
*/
|
||||
protected boolean button1 (MouseEvent e)
|
||||
{
|
||||
return e.getButton() == MouseEvent.BUTTON1;
|
||||
}
|
||||
|
||||
/** Are we armed and did we start armed in this drag? */
|
||||
protected boolean _armed, _startedArmed;
|
||||
};
|
||||
|
||||
component.addMouseListener(mia);
|
||||
component.addMouseMotionListener(mia);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will be called when a click is registered over the component.
|
||||
*/
|
||||
public void clicked ()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Called during drags to let us know if the component should be drawn
|
||||
* armed or not.
|
||||
*/
|
||||
public void setArmed (boolean armed)
|
||||
{
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user