2011-12-06 77 views
2

我正在創建一個Java swing GUI,並且我已經格式化了一個JPanel來使用GridLayout。我需要訪問網格的特定「框」(即特定座標),但是我看不到這樣做的方法。Java Swing Gridlayout:訪問Specfic座標

有沒有我缺少的方法?我怎樣才能做到這一點?

感謝您的幫助!

+0

你正在爲[河內塔]建造一個視圖(http://stackoverflow.com/questions/7747691/solving-recursive-towers-of-hanoi-in-lisp)? – trashgod

+0

*「需要訪問網格的特定」框「(即特定座標)」* 1)提供給最終用戶的程序功能是什麼?網格中的單元格是什麼? –

+0

@trashgod不,我不是在河內的塔樓工作 - 雖然我正在爲遊戲製作一個GUI。 – kubasub

回答

3

您不應該依賴於GUI代碼(視圖)爲您提供有關程序數據(模型)的信息。最好的解決方案是「知道」哪一個組件從一開始就在哪裏 - 也許你應該有一個數據結構(二維數組?),它包含了組件,並且只要有東西添加到網格就會更新。

如果你想要一個快速和非常髒的修復,但是,你可以開始玩JPanel.getComponentAt()遊戲。然而,這需要像素座標,所以您需要進行一些逆向工程來確定給定的網格平方有多少空間。網格廣場之間的空間爲is given by your GridLayout object。這是不建議雖然。我只是爲了完整性而加入它(因爲它是對你的問題的更直接回應)。

+0

好吧,我想我知道我做錯了什麼。 我只是添加了一堆JLabels來填充X的網格,然後當玩家猜測某些座標時X會變成數字。儘管我沒有在任何數據結構中存儲JLabel。 我現在就試試,謝謝! – kubasub

+2

@KubaSub,不要存儲JLabels ...你會再次混合模型和視圖。讓遊戲在沒有GUI的情況下可以玩,然後將GUI添加到遊戲中......這樣你就不會試圖將UI組件用作數據或數據存儲。 – Paul

+1

@保羅提出了一個很好的觀點;另請參閱此[MCV示例](http://stackoverflow.com/a/3072979/230513)。 – trashgod

1

GridLayout「容器被分成相等大小的矩形。」您可以在要顯示爲空的位置添加一個空的透明組件,例如new JLabel("")。另見GridBagLayoutUsing Layout Managers

+0

您可能會從使用網格切換按鈕的[遊戲](http://sites.google.com/site/drjohnbmatthews/buttons)中獲得一些建議。 – trashgod