2014-10-31 45 views
4

我可以在JScrollBar上定義不同的滾動速度嗎?使用單個JScrollBar的JComponent上的不同滾動速度

例如,假設我們有一個高度爲1000的圖像不符合我的框架。因此,我已經創建了一個默認的JScrollBar演技不如預期,假設身高200的viewport

[^] 
(*) -> The topmost pixel in the frame has height 0 of the image 
| 
| 
| 
| 
[v] 

[^] 
| 
(*) -> The topmost pixel in the frame has height 200 of the image 
| 
| 
| 
[v] 

[^] 
| 
| 
(*) -> The topmost pixel in the frame has height 400 of the image 
| 
| 
[v] 

現在我的問題:我可以改變這種行爲?例如,我想它的行爲以下列方式:

[^] 
(*) -> The topmost pixel in the frame has height 0 of the image! 
| 
| 
| 
| 
[v] 

[^] 
| 
(*) -> The topmost pixel in the frame has height 300 of the image! 
| 
| 
| 
[v] 

[^] 
| 
| 
(*) -> The topmost pixel in the frame has height 650 of the image! 
| 
| 
[v] 

滾動條應該看起來還是和以前一樣,但個別滾動的速度會在旋鈕上的滾動條改變。理想情況下,我想定義一些滾動速度保持不變的區域。這個問題聽起來很奇怪,但我需要這樣一種機制,因爲我動態地繪製了JScrollBar的組件,並且我不知道它的確切大小。這種行爲甚至可以在Swing中實現嗎?

+1

的JScrollBar返回最小和最大價值,用這個值scroling增量 – mKorbel 2014-10-31 13:51:55

回答

3

您可以覆蓋的JScrollBar方法

public int getUnitIncrement(int direction) { 
    int superValue=super.getUnitIncrement(direction); 
//define a speedScaleValue is calculated based on value and maximum 
    return superValue*speedScaleValue; 
} 
+0

謝謝您的回答。但那不是我正在尋找的。滾動條應該以相同的速度移動,但圖像上的實際滾動速度應根據旋鈕位置增加/減少(如在我的文章中的圖片)。所以當比較兩個滾動條(默認和我的「修改」)時,兩個滾動條都處於完全相同的位置,他們應該顯示不同的視口。任何想法如何實現這一目標?也許這篇文章的標題有點誤導。 – BluesSolo 2014-11-03 08:01:53

+1

這是更復雜的事情。該旋鈕由ScrollBarUI渲染,並且與L&F相關。查看BasicScrollBarUI的protected void setThumbBounds(int x,int y,int width,int height)方法。你cn重寫它適應Y – StanislavL 2014-11-03 08:02:08

+0

感謝您的回答StanislavL。我會檢查這一點。 – BluesSolo 2014-11-03 08:03:56