2013-02-17 415 views
2

我目前處於完全損失狀態。我沒有在Java中構建GUI方面做過很多工作,我一直在閱讀關於swing和JPanel的所有內容,我認爲我正在嘗試做的事情是可能的,我只是沒有想出如何使用JPanel繪製直線並得到點座標

我想要建立一個GUI,在其中您可以在特定的繪圖區域內繪製直線,我希望能夠獲得開始/端點座標以便與這些點執行一些數學運算。任何幫助將不勝感激!

回答

1

這比用「(x1,y1)和(x2,y2)」方法繪製直線更難。

企業需要的是動態創建和放置其上監聽MouseEventJPanel s在畫布區域作爲JPanel本身Line(自定義)對象。您還需要將MODEL從VIEW中分離出來,以便您的自定義畫布JPanel將使用替代功能正確繪製自己的問題paintComponent()

問題有點模糊,所以無法提供任何代碼。

3

Performing Custom Painting2D Graphics開始。

基本上,你需要一個鼠標監聽器來監視用戶與你的面板的交互,查看How to write mouse listeners瞭解更多信息。

根據您的需要,如果您需要維護用戶的所有點擊點,則需要將它們存儲爲類似List的內容,或者只需要知道開始點和結束點,需要一對Point對象。

您將能夠使用這些來繪製到您的表面並執行所需的計算。

請記住,在這種情況下,這些點與它們生成的容器是上下文相關的。這爲0x0將容器

更新

你也可以把形狀API的優勢的左上角,用Line2D來表示兩個點。這將更容易區分不同的線條/點

+0

您好,我們再次見面!我離開了他的算法 - 讓他自己編碼。這樣他就會學得更好:) – 2013-02-17 07:23:13

+0

@LittleChild Trail通過編碼,我喜歡你的想法;) – MadProgrammer 2013-02-17 07:48:30

+1

@MadProgrammer非常感謝。你的答案基本上都是我在找的東西! – Sam 2013-02-17 09:13:41

1

您需要在JPanel上添加鼠標偵聽器。

則:

public void mouseClicked(MouseEvent me){ 
if(click==1){ 
int x1=me.getX(); 
int y1=me.getY(); 
click=click+1; 
} 
else{ 
int x2=me.getX(); 
int y2=me.getY(); 
click=1; 
} 
} 


drawLine(x1,y1,x2,y2) 

來繪製鼠標移動,你還可以添加鼠標移動監聽線路。

11

我會留下代碼給你,所以這裏是算法:
1.創建一個JFrame並添加一個JPanel它。
2.爲JPanel添加鼠標偵聽器
3.每次按下鼠標時,獲取點擊的x和y。 (起點)
4.拖動鼠標時,連續記錄x和y。
5.當釋放鼠標時,記錄x和y。(結束點)
6.您可以使用drawLine()方法Graphics類或使用draw()Graphics2D在這種情況下,您將需要一個Line2D.Double - 參數保持不變 - 開始x,開始y,結束x和結束y



這裏是一個圖像來解釋一個可愛的好一點: enter image description here

+1

這太棒了!再次感謝。 – Sam 2013-02-17 22:16:56

+0

'mouseRelease()'事件的座標看起來不正確! – Eric 2013-10-16 11:43:56

+0

對不起,怎麼樣? :) – 2013-10-16 15:58:33