2012-04-28 52 views
2

我想製作類似於圖編輯器的應用程序 - 允許用戶在畫布上創建,查看和編輯一組形狀的應用程序。我的GUI基本上有三個部分 - 標準的JMenuBar,右側的一個JPanel,用於顯示有關形狀的信息以及應該用於形狀可視化的JPanel。Java Swing/AWT - 使用上下文菜單繪製對象

除此之外,我有一個定義形狀的包。爲了簡單起見,只有一個Square,包含以下信息:畫布上的座標,大小,用戶定義的名稱和描述,顏色。 項目的主要類(JFrame的擴展)包含正方形列表。

現在,我可以通過使用drawrect和whatnot在JPanel中簡單地繪製圖形來形象化這些圖形,但是我想創建一個交互式編輯器 - 如果用戶右鍵單擊可視形狀,會彈出一個上下文菜單允許他移動它,改變它的屬性或完全刪除它的形狀。單擊JPanel中的空白區域將允許用戶(再次通過菜單)創建新形狀。

是否有自動的方式來做到這一點,而不是手動保持矩陣映射畫布的每個像素爲特定的形狀,並在右擊時檢查它?例如,我可以在JPanel中畫一個這樣的東西,然後點擊... 一個相關的問題,當我在JPanel中編輯形狀時,如何訪問主應用程序類中的Square/Circle列表,這樣我才能真正改變它?我想這很簡單,但現在我不知道我該怎麼做。

請點我在正確的方向,什麼都可以理解,技巧,示例,鏈接到相關教程...

回答

2

達到這一目的的最常用的方法是允許的形狀,以確定是否點內形狀。希望你的代碼是面向對象的,並且你的形狀的每種類型都是一個類。

您所要做的就是爲每個形狀定義一個方法,如boolean isInside(point: Point)。一旦你擁有了所有你需要做的就是以反向的z順序(從上到下)來走形狀,並且看看鼠標點擊的地方在哪裏。如果它不借助任何形狀 - 您點擊畫布。一旦你有這個信息,你可以顯示一個合適的菜單。

希望這有助於

3

正如@eugener建議,實現了Shape接口的類有方法是對這項有益的。 GraphPanel是一個例子,說明你提到的幾個功能。