How do you deactivate e.g. the mouseReleased event callback on a JSlider
component?
Asked
Active
Viewed 65 times
-1

Andrew Thompson
- 168,117
- 40
- 217
- 433

Stéphane Mottelet
- 2,853
- 1
- 9
- 26
-
11) For better help sooner, post a [MCVE] or [Short, Self Contained, Correct Example](http://www.sscce.org/). 2) **See [What is the XY problem?](http://meta.stackexchange.com/q/66377)** – Andrew Thompson Apr 04 '18 at 10:03
2 Answers
2
You can override JSlider, with an enabled property. When adding a mouse listener, create a new mouse listener which delegates to the original, but only when the property is enabled:
import javax.swing.JSlider;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
class MyJSlider extends JSlider
{
private boolean isEnabled = true;
public void setEnabled(boolean isEnabled)
{
this.isEnabled = isEnabled;
}
@Override
public synchronized void addMouseListener(final MouseListener delegate)
{
super.addMouseListener(
new MouseListener() {
@Override
public void mouseClicked(final MouseEvent e) {
delegate.mouseClicked(e);
}
@Override
public void mousePressed(final MouseEvent e) {
delegate.mousePressed(e);
}
@Override
public void mouseReleased(final MouseEvent e) {
if (isEnabled) {
delegate.mouseReleased(e);
}
}
@Override
public void mouseEntered(final MouseEvent e) {
delegate.mouseEntered(e);
}
@Override
public void mouseExited(final MouseEvent e) {
delegate.mouseExited(e);
}
}
);
}
}

Michael
- 41,989
- 11
- 82
- 128
1
I usually just get the listener check against a local boolean flag in the class adding it before processing the rest of the listener which I turn on or off to determine if the listener should be processed.

William Jarvis
- 347
- 3
- 6