与JSlider一起使用的自定义范围

时间:2011-05-28 09:52:45

标签: java swing jslider

我正在尝试创建一个可以移动以下范围的jslider。

[-x,-1)[1,x]

简而言之,我不希望值-1和0成为JSlider的有效值。 但是应该允许从x到-1的值,并且应该允许1到x。

我正在尝试不编写hacky代码,所以我不想在UI代码中编写一个只从不同(连续)范围获取值的函数,然后将其转换为我想要的范围一堆声明。

理想情况下,我应该只能调用slider.getValue()并知道返回值将在我上面描述的范围内。

2 个答案:

答案 0 :(得分:2)

我认为您必须自己在重写方法setValue()内进行此值调整?

试试这段代码:

    int x = 10;
    @Override
    public void setValue(int n)
    {
        if((n >= -x && n < -1)|| (n =< x && n >= 1))
        {   
            super.setValue(n);
            System.out.println("OI in setValue");
        }
    }

答案 1 :(得分:2)

滑块的值只是拇指当前位置和滑块宽度之间的比率(以像素为单位)。 IIUC,您有三个范围[-x,-1)[-1,1)[1,x],因此您需要两个拇指。您可以查看支持JXMultiThumbSliderMultiThumbModel

附录:对于相关的用例,我从How to Write a Custom Swing Component开始。这很费劲,但可能会产生更清晰的结果。