首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置JSlider限制

设置JSlider限制
EN

Stack Overflow用户
提问于 2015-08-05 14:36:35
回答 2查看 1.7K关注 0票数 1

我有一个JSlider,它从minmax值。我想为滑块的移动设定一个范围限制。

也就是说,我想把滑块的限制从-90移到90,但是我只想在-45到60之间移动滑块。在这种情况下,滑块没有达到极限,但在达到它之前就被阻塞了。

我怎样才能得到这个结果?

代码语言:javascript
复制
import java.awt.BorderLayout;

import javax.swing.BoundedRangeModel;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class TickSlidersSnapToTicks {
  public static void main(String args[]) {
    JFrame frame = new JFrame("Tick Slider");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JSlider slider = new JSlider(-90, 90, 0);

    // Major Tick 25 - Minor 5
    jSliderOne.setMinorTickSpacing(5);
    jSliderOne.setMajorTickSpacing(25);
    jSliderOne.setPaintTicks(true);

    // I want to put here slider block limits
    // ...

    frame.add(jSliderOne, BorderLayout.NORTH);
    frame.setSize(300, 200);
    frame.setVisible(true);
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-05 16:36:56

此解决方案有效(请注意让滑块认为用户释放鼠标的技巧):

代码语言:javascript
复制
public class InnerSlider extends JSlider {

    int innerMin, innerMax;

    public InnerSlider(int min, int max, int innerMin, int innerMax){
        super(min,max);
        this.innerMin = innerMin;
        this.innerMax= innerMax;
        addChangeListener((e) -> {
            if(getValue() < innerMin){
                setValue(innerMin);
                getMouseListeners()[0].mouseReleased(null);
            }else if(getValue() > innerMax){
                setValue(innerMax);
                getMouseListeners()[0].mouseReleased(null);
            }
        });
    }
}
票数 1
EN

Stack Overflow用户

发布于 2015-08-05 16:23:16

有快速肮脏的方法可以做到这一点,但这违反了一些设计原则,如LSP。

代码语言:javascript
复制
    JSlider jSliderOne = new JSlider();

    // Major Tick 25 - Minor 5
    jSliderOne.setMinorTickSpacing(5);
    jSliderOne.setMajorTickSpacing(25);
    jSliderOne.setPaintTicks(true);
    jSliderOne.setModel(new DefaultBoundedRangeModel()
                    {
                      @Override
                      public void setValue(int n)
                      {
                        if (n > 50)
                        {
                          n = 50;
                        }
                        else if (n < -45)
                        {
                          n = -45;
                        }

                        super.setValue(n);
                      }
                    }
);

在此解决方案中,如果用户试图拖动拇指系统将允许超出限制,但一旦用户释放鼠标,它将设置为限制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31835586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档