2011-11-02 56 views
2

我有興趣創建一個類似於JSlider Widget的新Widget,但帶有顯示上一個滑塊位置的「ghost」(半透明)旋鈕爲真實旋鈕的移動添加一個類似軌跡的動畫。擴展Java Swing Widgets(希望爲JSlider添加動畫和額外的標記)

我對擴展Java Swing小部件以添加新功能的適當方式有些困惑。

當我看到它,我有幾個選擇:

1)JSlider的擴展,這裏將我所有的新模型,並覆蓋漆先畫出JSlider的,比來覆蓋我的期望增加。這個解決方案的問題是我需要使用試驗和錯誤來將標記置於正確的位置(因爲我不能訪問完整的幾何信息),這可能會使其無法在所有情況下工作。 2)擴展Slider小部件的各種類(JSlider,SliderUI,BasicSliderUI,MetalSliderUI,BoundedRangeModel,DefaultBoundedRangeModel)。我在這裏看到的優點是保持適當的模型 - 視圖 - 控制器體系結構。但是,這將需要在類中重載各種函數。我相信結果會顯得非常黑。

3)複製Slider部件的所有代碼,修改以創建我的新部件。這與選項(2)類似,但修改代碼然後擴展函數(基本上會複製/修改代碼)可能會稍微簡單一些。

4)用我所需的功能從頭開始重新創建滑塊小部件。在查看現有的Swing Slider部件代碼後,這不是一項簡單的任務。

我是否缺少一些更優雅的方法來創建一個借用現有功能的新小部件?

謝謝你的洞察力。

回答

2

我會選擇2)進行一些更改 創建WrapperSliderUI將委託給委託UI的所有方法調用的類。並重寫只是繪製方法。

您JSlider的SetUI換行原UI在WrapperSliderUI

public void setUI(SliderUI ui) { 
    super.setUI(new WrapperSliderUI(ui)); 
} 

中的油漆,你將檢查原來UI類,並相應地調整你的畫。

+0

+1有一個相關的例子[這裏](http://stackoverflow.com/questions/6996263)。 – trashgod

+0

謝謝,這有幫助。 – kashiko