|
JVSlider |
|
/* * JVirus is a PacMan clone, written in Java. * * Please read "http://jvirus.sourceforge.net/jvirus_licence.txt" for copyrights. * * The sourcecode is designed and created with * Sun J2SDK 1.3 and Microsoft Visual J++ 6.0 * * JVirus homepage: http://jvirus.sourceforge.net * * autor: Slawa Weis * email: slawaweis@animatronik.net * */ package org.game.JVirus; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; /** * slider for music and siund volume * * @see org.game.JVirus.JVirus.Panel */ public class JVSlider extends JPanel { /** * min value of slider */ protected int sliderMin = 0; /** * max value of slider */ protected int sliderMax = 100; /** * current slider position */ protected int sliderPos = 10; /** * callback listener list */ protected Vector vecEventListener = new Vector(); /** * main constructor. * * @param min min value * @param max max value * @param pos start position */ public JVSlider(int min, int max, int pos) { super(null); this.sliderMin = min; this.sliderMax = max; this.sliderPos = pos; setPreferredSize(new Dimension(114, 13)); Dragger dragger = new Dragger(); addMouseListener(dragger); addMouseMotionListener(dragger); } /** * paintComponent overwritten to draw the slider */ public void paintComponent(Graphics g) { super.paintComponent(g); ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Dimension size = getSize(); int h2 = size.height/2; g.setColor(Color.green); // g.drawRect(0, 0, size.width-1, size.height-1); g.drawLine(7, h2, size.width - 7, h2); g.fillOval(sliderPos+3, h2-4, 9, 9); } /** * add callback listener */ public void addChangeListener(ChangeListener cl) { vecEventListener.addElement(cl); } /** * remove callback listener */ public void removeChangeListener(ChangeListener cl) { vecEventListener.removeElement(cl); } /** * get current slider position */ public int getPosition() { return sliderPos; } /** * set the current position and send a event to the listeners */ protected void setSliderPosition(int pos) { this.sliderPos = pos; // System.out.println("" + pos); ChangeEvent e = new ChangeEvent(this); Vector vecCopy = (Vector)vecEventListener.clone(); for(int i = 0; i < vecCopy.size(); i++) { ((ChangeListener)vecCopy.elementAt(i)).stateChanged(e); } } /** * this class catch the mouse event to move the slider */ protected class Dragger extends MouseAdapter implements MouseMotionListener { protected boolean drag = false; protected Point lastLocation = new Point(); protected Rectangle hitRect = new Rectangle(); public void mousePressed (MouseEvent e) { drag = false; int h2 = getSize().height/2; hitRect.setRect(sliderPos+3, h2-4, 8, 8); if(hitRect.contains(e.getPoint())) { lastLocation.setLocation(e.getPoint()); drag = true; } } public void mouseReleased(MouseEvent e) { drag = false; } public void mouseDragged(MouseEvent e) { if(drag) { // sliderPos = sliderPos + (e.getX() - lastLocation.x); sliderPos = e.getX()-7; if(sliderPos < 0) sliderPos = 0; if(sliderPos > 100) sliderPos = 100; lastLocation.setLocation(e.getPoint()); repaint(); setSliderPosition(sliderPos); } } public void mouseMoved(MouseEvent e) { } } }
|
JVSlider |
|