2010-06-08 71 views
3

我想構建一個新的java swing組件,我意識到我可能能夠找到一個能夠在網絡上做我所需要的功能,但這對我來說部分是一個練習。學習要做到這一點。自定義Swing組件:關於方法的問題

我想構建一個代表甘特圖的swing組件。這將是很好的(雖然不是必要的人們能夠與它進行交互(例如滑動任務周圍以調整時間)

它感覺最好的方法是子類JComponent,並覆蓋PaintComponent()爲'繪製一張圖片「,而不是像試圖將所有東西都塞進一個自定義的東西JTable

我已經閱讀了幾本關於這個主題的書,還看了幾個例子(最值得注意的是像JXGraph的東西) - 但我很好奇幾件事

  • 什麼時候我必須切換到使用UI委託,以及什麼時候可以堅持在paintcomponent()中渲染我想要的東西?

  • ,如果我想其他Swing組件作爲我的組件的子元素(例如,我想一個文本框,我的甘特圖)

    • 我可以不再使用的paintComponent()?
    • 可以隨意我我的甘特圖中定位他們,還是我用普通擺動佈局管理器

許多在此先感謝。

-Ace

回答

10

我認爲the article我幾年前寫的java.net今天仍然是正確的。在一個單一的課堂上做所有事情可以讓你在開始的時候更快,但是變得非常混亂。我強烈建議在模型(在你的主類)和視圖(UI委託)之間進行分離。該視圖負責:

  • 與用戶的交互 - 鼠標,鍵盤等
  • 在必要時創建

在中期和長期來看,這種「工人」子是已經被驗證了一遍又一遍在Flamingo component suite的方法,它可以作爲一個額外的參考使用點(除了核心Swing組件的實現之外)。

+0

+1我經常依賴和引用這篇文章。 – trashgod 2010-06-09 02:38:56

4
  • 使用UI委託是一個好主意,如果你認爲你的組件應該尋找不同的不同的外觀和感覺。從設計角度來看,通常也是一個好主意,可以將演示文稿從組件中分離出來

  • 即使覆蓋paintComponent,您仍然可以在其上放置任何子組件。

  • 使用null佈局,您可以定位組件。或者,您也可以使用佈局。

這是一個非常好的starting point給你。

+0

+1同一文章! :-) – trashgod 2010-06-09 02:40:12

+0

是的......只有在Kirill發佈他的答案前2個小時:) – 2010-06-09 11:33:34