我有一個很大的組件(比如width = 4000px,height = 200px),並且希望能夠在小屏幕上完全看到它。 我沒有看到任何簡單的方法來做一個包裝組件,我的想法如下: 給定一個因素(例如4),組件的大小爲1000x800,通過包裝孩子到4行。尺寸要求將被翻轉以重塑兒童,等等。在繪畫上,組件會用一個正確的Graphics參數調用孩子的paint(Graphics)4次,該參數會將包裝後的空間映射到孩子的空間。
但是,我看不到如何處理所有事件:我應該爲每個兒童生成的事件(PropertyChange)和每個父生成事件(Mouse,Key,Resize,....)設置eventlisteners?這似乎相當多的映射,我很樂意聽到一個更簡單的方法做到這一點...
我沒有看太多在JViewport的實施,但也許這可以幫助我不要你認爲?如何將組件包裝到多行
感謝您的建議!
Frederic。
編輯回答了一些建議重新設計組件的意見:
請允許我在此不同意:使組件成爲一項工作,表明它是另一項工作。如果我想用滾動條來顯示它,我使用滾動窗格,而如果我想要將它分成4行,我想使用類似的解決方案。
我是有問題的組件的設計者(並且對我自己有尖銳的話,正如所建議的那樣,但它導致我無處:-))。我實際上在其中添加了「換行代碼」,但它顯示(非常快!)添加點空間轉換,組件代碼中的繪製管理本身使其真的非常混亂,這就是爲什麼我想象一個專門組件是一個更好的解決方案。 此外,製作自定義組件讓我可以更輕鬆地重用它,作爲任何其他組件的「包裝器」。 想象一下,如果每次使用JScollPane時都必須重新創建類似JScollPane的功能,請處理滾動位置,緩衝繪製和自己組件內的所有內容:希望您不必!
你似乎建議重新設計子組件,但問題是這個組件是一些活動的直方圖,並且它的paintcomponent()中有一個4000x200px的圖像。這就是爲什麼我正在尋找一種更通用的方式將其放在4行中而不用觸摸它... – Goulou 2010-08-08 07:48:45
在我回答此評論之前,通常最好通過編輯原始問題而不是添加解釋性評論來完成此操作。 – DJClayworth 2010-08-09 13:33:51
如果你說你有一個組件,你不能修改它繪製一個4000x200的圖像,並且不允許大小改變,那麼找出誰設計了這個組件,並且與他們有非常尖銳的詞彙。 – DJClayworth 2010-08-09 17:52:53