将 JSlider 旋钮绑定到外部 int 值

Bind JSlider knob to an external int value

我的 JSlider 有一个 iconScaleManager 作为属性。 iconScaleManager 拥有一个 int,其值对应于 JSlider 刻度。 int 被另一个 class 修改,一个 ActionListener 添加到 2 个 JButtons.

目标是:我希望旋钮自行移动到与刻度线相对应的 int 的实际值。 我想我需要绑定值或触发事件,但我不知道该怎么做。

当然,我在 JSlider 上添加了一个 ChangeListener :

public class SliderListener implements ChangeListener {
     private int sliderIndex = 0;
     private IconScaleManager iconScaleManager = null;

     public SliderListener(int startingIndex, IconScaleManager renderer) {
         sliderIndex = startingIndex;
         iconScaleManager = renderer;
     }

     @Override
     public void stateChanged(ChangeEvent e) {
         JSlider source = (JSlider)e.getSource();
         sliderIndex = source.getValue();
         iconScaleManager.scaleSlider(sliderIndex);
     }  
}

为了更简单的使用,我将按钮的 ActionListener 更改为 actionPerformed() 中的 JSlider (setValue(iconScaleManager.getScaleIndex())) 的状态。 (这比我想象的要简单)。感谢@MadProgrammer。

public class ZoomListener implements ActionListener {
    private boolean zoomIn = false;
    private JSlider zoomSlider = null;
    private IconScaleManager iconScaleManager = null;

    public ZoomListener(boolean zoom, JSlider slider, IconScaleManager renderer) {
        zoomIn = zoom;
        zoomSlider = slider;
        iconScaleManager = renderer;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        iconScaleManager.scaleButton(zoomIn);
        System.out.println(iconScaleManager.getScaleIndex());
        zoomSlider.setValue(iconScaleManager.getScaleIndex());
    }
}