Whenever I click a JSlider it gets positioned one majorTick in the direction of the click instead of jumping to the spot I actually click. (If slider is at point 47 and I click 5 it’ll jump to 37 instead of 5). Is there any way to change this while using JSliders, or do I have to use another datastructure?
Share
As bizarre as this might seem, it’s actually the Look and Feel which controls this behaviour. Take a look at
BasicSliderUI, the method that you need to override isscrollDueToClickInTrack(int).In order to set the value of the
JSliderto the nearest value to where the user clicked on the track, you’d need to do some fancy pants translation between the mouse coordinates fromgetMousePosition()to a valid track value, taking into account the position of theComponent, it’s orientation, size and distance between ticks etc. Luckily,BasicSliderUIgives us two handy functions to do this:valueForXPosition(int xPos)andvalueForYPosition(int yPos):