FileDocCategorySizeDatePackage
Scroll.javaAPI DocJMF 2.1.1e5832Mon May 12 12:20:52 BST 2003com.sun.media.ui

Scroll

public class Scroll extends Component implements MouseListener, MouseMotionListener

Fields Summary
Image
imageGrabber
Image
imageGrabberX
Image
imageGrabberDown
Graphics
paintG
boolean
grabbed
boolean
entered
int
grabberPosition
int
leftBorder
int
rightBorder
int
sliderWidth
int
width
int
height
int
displayPercent
float[]
detents
Dimension
dimension
float
lower
float
upper
float
range
float
value
boolean
dragging
boolean
grabberVisible
ActionListener
actionListener
Constructors Summary
public Scroll()


      
	this(null, null);
    
public Scroll(float[] detents)

	this(detents, null);
    
public Scroll(float[] detents, Color background)

	imageGrabber = BasicComp.fetchImage("grabber.gif");
	imageGrabberDown = BasicComp.fetchImage("grabber-pressed.gif");
	imageGrabberX = BasicComp.fetchImage("grabber-disabled.gif");

	this.detents = detents;
	if (background != null) {
	    setBackground(background);
	}
	width = 115;
	height = 18;
	displayPercent = 100;
	dimension = new Dimension(width, height);
	sliderWidth = width - leftBorder - rightBorder;
	setSize(width, height);
	setVisible(true);
	grabbed = false;
	entered = false;
	addMouseListener( this );
	addMouseMotionListener( this );
    
Methods Summary
public java.awt.PointgetPosition()

	return new Point(grabberPosition + leftBorder, 10);
    
public java.awt.DimensiongetPreferredSize()

	return dimension;
    
public floatgetValue()

	return value;
    
private intlimitGrabber(int mousex)

	int x = mousex - leftBorder;
	if (x < 0)
	    x = 0;
	else if (x > sliderWidth)
	    x = sliderWidth;
	return x;
    
public voidmouseClicked(java.awt.event.MouseEvent me)

 
public voidmouseDragged(java.awt.event.MouseEvent me)

	int modifier = me.getModifiers();
	if ((modifier & InputEvent.BUTTON2_MASK) == 0 &&
	    (modifier & InputEvent.BUTTON3_MASK) == 0 ) {
	    if (isEnabled()) {
		dragging = true;
		grabberPosition = limitGrabber(me.getX());
		seek();
	    }
	}
    
public voidmouseEntered(java.awt.event.MouseEvent me)

	entered = true;
	repaint();
    
public voidmouseExited(java.awt.event.MouseEvent me)

	entered = false;
	repaint();
    
public voidmouseMoved(java.awt.event.MouseEvent me)

 
public voidmousePressed(java.awt.event.MouseEvent me)
MouseListener methods

	int modifier = me.getModifiers();
	if ((modifier & InputEvent.BUTTON2_MASK) == 0 &&
	    (modifier & InputEvent.BUTTON3_MASK) == 0 ) {
	    if (isEnabled()) {
		dragging = false;
		grabbed = true;
		grabberPosition = limitGrabber(me.getX());
		seek();
	    }
	}
    
public voidmouseReleased(java.awt.event.MouseEvent me)

	int modifier = me.getModifiers();
	if ((modifier & InputEvent.BUTTON2_MASK) == 0 &&
	    (modifier & InputEvent.BUTTON3_MASK) == 0 ) {
	    if (isEnabled()) {
		dragging = false;
		grabbed = false;
		repaint();
	    }
	}
    
public voidpaint(java.awt.Graphics g)

	Dimension size = getSize();
	int x;
	int y = (size.height / 2) - 2;

	paintG = g;
	
	int grabberX = grabberPosition + leftBorder - 5;

	// Draw the trough
	g.setColor(getBackground());
	y = (getSize().height / 2) - 2;
	g.draw3DRect(2, y, size.width - 4, 3, false);

	// Draw the display in the trough
	if (displayPercent < 100) {
	    g.setColor(Color.green);
	    x = sliderWidth * displayPercent / 100 + 3;
	    y += 2;
	    g.drawLine(x, y, size.width - 4, y);
	}

	// Draw the marks for detents
	if (detents != null && detents.length != 0) {
	    paintG.setColor(Color.black);
	    for (int i = 0; i < detents.length; i++) {
		x = leftBorder + (int)(detents[i] * sliderWidth / range);
		paintG.drawLine(x, 12, x, 15);
	    }
	}

	// Draw the grabber
	if (grabberVisible) {
	    Image image;
	    if (isEnabled()) {
		if (grabbed || entered)
		    image = imageGrabberDown;
		else
		    image = imageGrabber;
	    } else {
		image = imageGrabberX;
	    }
	    paintG.drawImage(image, grabberX, 4, this);
	}
    
private voidseek()

	value = ((float)grabberPosition/sliderWidth);
	if (detents != null && detents.length > 0 && dragging) {
	    float tolerance = 0.05f;
	    for (int i = 0; i < detents.length; i++) {
		if (Math.abs(detents[i] - value) <= tolerance)
		    value = detents[i];
	    }
	}
	
	repaint();
	if (actionListener != null)
	    actionListener.actionPerformed(new ActionEvent(this,
							   ActionEvent.ACTION_PERFORMED,
							   "scroll"));
	
    
public voidsetActionListener(java.awt.event.ActionListener al)

	actionListener = al;
    
public voidsetDisplayPercent(int percent)

	if (percent != displayPercent) {
	    displayPercent = percent;
	    if (displayPercent > 100) {
		displayPercent = 100;
	    } else if (displayPercent < 0) {
		displayPercent = 0;
	    }
	    repaint();
	}
    
public voidsetEnabled(boolean state)

	super.setEnabled(state);
	repaint();
    
public voidsetSize(int width, int height)
Component methods

	super.setSize(width, height);
	paintG = null;
	repaint();
    
private voidsetSliderPosition(float value, float range)

	grabberPosition = (int) ( value / range * sliderWidth);
    
public voidsetValue(float value)

	lower = 0.0f;
	upper = 1.0f;
	range = upper - lower;
	setSliderPosition(value - lower, range);
	repaint();