package com.quiltplayer.view.swing.textarea;
import java.awt.Cursor;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JTextArea;
/**
*TODO This is almost the same class as ScrollableButton
*
* @author Vlado Palczynski
*
*/
public abstract class ScrollableTextArea extends JTextArea {
protected static final long serialVersionUID = 1L;
protected boolean moved;
private int clickedYPosition;
public ScrollableTextArea() {
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();
}
/*
* (non-Javadoc)
*
* @see java.awt.event.MouseAdapter#mouseEntered(java.awt.event.MouseEvent)
*/
@Override
public void mouseEntered(MouseEvent e) {
/* No other mouse pointer */
setCursor(Cursor.getDefaultCursor());
}
});
/*
* 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;
if (e.getYOnScreen() <= clickedYPosition)
movement = clickedYPosition - e.getYOnScreen();
else
movement = e.getYOnScreen() - clickedYPosition;
if (movement >= 20)
moved = true;
}
});
}
protected abstract void triggerAction();
}