2

これは私のGUIです:

ここに画像の説明を入力

以下は、まさにこれを生成する SSCCE です。は、0 ~ 100JSliderの表示値に接続されています。JTextField

10 の間隔で停止するように次のように設定しました。これは機能しますが、ドラッグするとテキストフィールドに 10 の間の値 (73 のように) が表示され、スライダーを離すと調整されます。ドラッグしているときでも、10 だけを表示する方法はありますか?

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);
    }
}
4

1 に答える 1