2011-05-28 110 views
2

我試圖創建一個jslider隨着下列範圍移動。自定義範圍使用JSlider

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

總之,我不希望值-1和0是JSlider的有效值。 但是應該允許從x到-1的值,並且允許1到x。我試圖不寫hacky代碼,所以我不想在UI代碼中寫一個函數,它只是從不同的(連續的)範圍獲取值,然後將其轉換爲我想要的範圍與一堆它的聲明。

理想情況下,我應該能夠調用slider.getValue()並知道返回值將在上述範圍內。

+1

添加了擺動標籤。所以更多有此經驗的人會看到它。 – Boro 2011-05-28 09:57:02

+0

應該明確想過要添加該標籤。感謝您添加它。 – 2011-05-28 09:58:15

+0

@Varun Madiath你到目前爲止做了什麼?你有一些代碼嗎? – Boro 2011-05-28 10:10:36

回答

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"); 
     } 
    } 
+0

我在想像這樣的代碼真的屬於模型。你不是嗎? – 2011-05-28 13:26:41

+0

@Varun Madiath你是對的。這會好得多。查看'BoundedRangeModel',然後可以將其設置爲滑塊。它有setValue方法,因此我相信你可以將代碼複製到你的模型中。 – Boro 2011-05-28 14:02:55

+0

好的,我用你的代碼看到的問題是,如果用戶要將滑動條拖動到-1或0的值,那麼滑塊將會簡單地反彈回到它之前的位置。這會混淆用戶。 – 2011-05-28 17:35:40

2

甲滑塊的值僅僅是拇指的當前位置與滑塊寬度,在像素之間的比率。 IIUC,你有三個範圍,[-x,-1),[-1,1)[1,x],所以你需要兩個拇指。您可能會看到JXMultiThumbSlider,它支持MultiThumbModel

附錄:對於相關用例,我從How to Write a Custom Swing Component開始。這很費勁,但它可能會產生更清晰的結果。

+0

你是否與java.net「熟悉」,爲什麼有一切d * i * e * d +1 – mKorbel 2011-05-28 20:11:19

+0

@mKorbel:非常好,但API可以作爲任何現存資源或示例的指南。 – trashgod 2011-05-28 20:21:13

+0

大和最大的項目是無法訪問例如SwingX http://stackoverflow.com/questions/6154504/jxmultisplitpane-causes-repaint-during-slider-adjustment,這是恐怖吸吮swingx.jar ... – mKorbel 2011-05-28 20:25:18