Code
public static final int MAXI = 80;
public static final int MINI = 40;
private static class MetalDragLimitedSliderUI extends MetalSliderUI {
@Override protected TrackListener createTrackListener(JSlider slider) {
return new TrackListener() {
@Override public void mouseDragged(MouseEvent e) {
// case HORIZONTAL:
int halfThumbWidth = thumbRect.width / 2;
int thumbLeft = e.getX() - offset;
int maxPos = xPositionForValue(MAXI) - halfThumbWidth;
int minPos = xPositionForValue(MINI) - halfThumbWidth;
if (thumbLeft > maxPos) {
e.translatePoint(maxPos + offset - e.getX(), 0);
} else if (thumbLeft < minPos) {
e.translatePoint(minPos + offset - e.getX(), 0);
}
super.mouseDragged(e);
}
};
}
}
private static JSlider makeSilder(String title) {
JSlider slider = new JSlider(0, 100, 40);
slider.setBorder(BorderFactory.createTitledBorder(title));
slider.setMajorTickSpacing(10);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
Dictionary<?, ?> dictionary = slider.getLabelTable();
if (Objects.nonNull(dictionary)) {
Enumeration<?> elements = dictionary.elements();
while (elements.hasMoreElements()) {
JLabel label = (JLabel) elements.nextElement();
int v = Integer.parseInt(label.getText());
if (v > MAXI || v < MINI) {
label.setForeground(Color.RED);
}
}
}
slider.getModel().addChangeListener(e -> {
BoundedRangeModel m = (BoundedRangeModel) e.getSource();
if (m.getValue() > MAXI) {
m.setValue(MAXI);
} else if (m.getValue() < MINI) {
m.setValue(MINI);
}
});
return slider;
}
References