Browse Source

slider fix

jess 7 years ago
parent
commit
e8b870a01d
1 changed files with 25 additions and 16 deletions
  1. 25 16
      src/ui/view/TimePanel.java

+ 25 - 16
src/ui/view/TimePanel.java

@@ -4,10 +4,12 @@ import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.FlowLayout;
 import java.awt.Image;
+import java.awt.Point;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
 
 import javax.swing.ImageIcon;
 import javax.swing.JButton;
@@ -21,9 +23,7 @@ import javax.swing.event.CaretEvent;
 import javax.swing.event.CaretListener;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
-import javax.swing.plaf.SliderUI;
 import javax.swing.plaf.basic.BasicSliderUI;
-import javax.swing.plaf.metal.MetalSliderUI;
 import javax.swing.plaf.synth.SynthSliderUI;
 
 import ui.controller.Control;
@@ -43,7 +43,29 @@ public class TimePanel extends JPanel {
 
 	JLabel simSpeedLabel = new JLabel(Languages.getLanguage()[84]);
 	private JTextField simSpeedText = new JTextField("1000");
-	JSlider timeSlider = new JSlider();
+	JSlider timeSlider = new JSlider(){
+	    {
+	    	// Make the slider jump to mouse position on left click
+	        MouseListener[] listeners = getMouseListeners();
+	        for (MouseListener l : listeners)
+	            removeMouseListener(l); // remove UI-installed TrackListener
+	        final BasicSliderUI ui = (BasicSliderUI) getUI();
+	        BasicSliderUI.TrackListener tl = ui.new TrackListener() {
+	            // this is where we jump to absolute value of click
+	            @Override public void mouseClicked(MouseEvent e) {
+	                Point p = e.getPoint();
+	                int value = ui.valueForXPosition(p.x);
+
+	                setValue(value);
+	            }
+	            // disable check that will invoke scrollDueToClickInTrack
+	            @Override public boolean shouldScroll(int dir) {
+	                return false;
+	            }
+	        };
+	        addMouseListener(tl);
+	    }
+	};;
 	private final JPanel timeBtnPanel = new JPanel();
 	final JButton playBtn = new JButton();
 	final JButton timeResetBtn = new JButton();
@@ -212,19 +234,6 @@ public class TimePanel extends JPanel {
 
 		this.add(timeBtnPanel, BorderLayout.WEST);
 		this.add(timeSlider);
-		
-		// Make the slider jump to mouse position on left click
-		timeSlider.setUI(new SynthSliderUI(timeSlider) {
-		    protected void scrollDueToClickInTrack(int direction) {
-		        int value = timeSlider.getValue(); 
-		        if (timeSlider.getOrientation() == JSlider.HORIZONTAL) {
-		            value = this.valueForXPosition(timeSlider.getMousePosition().x);
-		        } else if (timeSlider.getOrientation() == JSlider.VERTICAL) {
-		            value = ((BasicSliderUI)this).valueForYPosition(timeSlider.getMousePosition().y);
-		        }
-		        timeSlider.setValue(value);
-		    }
-		});
 	}
 
 	/**