2011-11-01 22 views
2

我想在java中製作棋盤遊戲,並且遇到以下問題。如何?在Java中繪製自定義組合對象

我想創建一個可以在jpanel中繪製的對象。讓我們命名這個對象板。這個板子我希望它成爲其他板子的複合物。因此,當我調用(讓我們稱之爲)paint()方法的電路板時,爲了正確繪製它將不得不自己調用paint並調用其子板的paint()方法等。 我知道這就像一個已經實現的行爲(有人可以說......只是在一個Jpanel中創建一個Jpanel),但不同的是,對於董事會對象,我希望能夠將它拖放到Jpanel中的任何位置。此外,Jpanel可能包含許多可以拖放到任何位置的板(也可以重疊)。所以這種行爲限制了我使用Java swing組件,因爲它們都使用不是我想要的佈局。

最後,當我一板對象添加到板我使用COORDS要相對於母基板,而不是JPanel的。 (即當我添加板B到板A,並且我想將板B添加到(x,y)=(10,10),這些座標是相對於A的位置)

這是任何方式來做到這一點?我不是在尋找完整的例子,只是爲了一般的想法(最好乾淨!)

PS。我已經實現了幾乎可以工作的東西。在我的實現中,問題在於Graphics Board用來繪製的圖片來自JPanel,並且x,y座標與所有Board的JPanel相對(而不是在添加Board的情況下的主板)到一個母板,而不是直接到JPanel)。

我不知道這是否是可熔的,但我正在成像,葉板是用自己的初始座標(0,0)自己繪畫,它在JPanel中以某種方式被轉換爲(x,y),具體取決於在董事會的Jpanel中的實際位置。

謝謝!

回答

2

我想你可以考慮使用MovingWindowsResizingComponents。我在過去使用一個空的LayoutManager做了類似的事情,但這不是一個好主意。

當您需要絕對定位組件或明確設置它們的大小時,有幾個問題。

下面是一些2個線程,你可能會考慮野趣:

  1. The first討論了類似的問題。
  2. The second解釋了爲什麼您無法直接在Component上使用setXXXSize方法。

理解這些解決方案的關鍵是,您不應該從應用程序代碼,組件大小設置。如果您需要調整大小,您必須在框架上進行調整。

+0

好的建議+1 – mKorbel

+0

@mKorbel:我在幾天前才知道。之前我不知道任何合適的解決方案,而不使用null佈局。 – Heisenbug

+0

感謝您提供的答案。我想知道,使用已經制作好的擺動部件並改變他們的行爲方式以符合我的標準並不是一個壞習慣嗎?當我在另一個棋盤遊戲中使用JButton作爲棋子時,我的體驗不好(這就是爲什麼我決定去寫我自己的組件)。 BTW是否在鏈接中提出了上述解決方案,支持組件的重疊? – Pitelk

相關問題