This is my GUI:
Below is a SSCCE that will produce exactly this. The JSlider
is connected to the JTextField
showing values between 0 and 100.
I have set the following to make it stop on intervals of 10. It works, but the textfield will still show values between the 10s (Like 73) when dragging, and then adjust it when i let go of the slider. Is there a way to ONLY show tens, even when dragging?
js.setMinorTickSpacing(10);
js.setSnapToTicks(true);
SSCCE:
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.text.NumberFormat;
import javax.swing.*;
import javax.swing.event.*;
import net.miginfocom.swing.MigLayout;
public class SSCCE {
public static void main(String[] args) {
JFrame frame = new JFrame("SSCCE JSlider + JTextField");
JPanel panel = new JPanel(new MigLayout("", "[200!][100!]", ""));
final JSlider js = new JSlider();
final JFormattedTextField tf = new JFormattedTextField(NumberFormat.getNumberInstance());
js.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
tf.setText(String.valueOf(js.getValue()));
}
});
tf.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent ke) {
String typed = tf.getText();
js.setValue(0);
if (!typed.matches("\\d+")) {
return;
}
int value = Integer.parseInt(typed);
js.setValue(value);
}
});
js.setMinorTickSpacing(10);
js.setSnapToTicks(true);
panel.add(js);
panel.add(tf, "grow");
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
}