我之前有一個問題,但它是非常糟糕的發佈,所以這裏再次,根據更好的規則。
我想創建一個圖形的一些風格像這樣的圖片:
。
它是基於物理法,Snell's Law。到目前爲止,我已經設法用一個基本的Line2D.Double自己繪製圖形,你可以看到here (Line.java)。然後,所有我需要做的是,在接口類,在該類中的行添加到陣列像這樣:
LinesArray.addLine(150 , 25 , 150 , 275);
每一次它增加了一個新的,它重新繪製,你可以在代碼中看到樣品。
但問題是,我不知道如何使這個互動。我想讓它變成互動的,因爲你可以實際移動這些線條,同時你移動第一條線,第二條線會根據斯涅爾定律公式移動,即:
n1 * sin (a1)= n2 * sin(a2)
考慮到a1是第一個圖像中的第一個(左)角,而a2是第二個(右)角。
我希望實現的一個完美例子是this one。 如果互動運動太困難(我在2天的時間表),this example也是一種可能性。
糾正我,如果我錯了,但對於第二個,我需要做的就是計算鼠標的座標並繪製並計算從那裏的一切。
Here (menu_ui.java)是我的接口類,其中我正在使用的行的方法是「menuSnell()」和here (Snell.java是包含邏輯的我的Snell類。對於葡萄牙語的評論道歉,但它是相當簡單的代碼,你並不真正需要評論來理解,再加上我已經分離成可讀的方法。
所以基本上,我的問題是我如何使這些線以上述方式互動。
謝謝!
你需要爲你的組件添加一個'MouseListener',監控鼠標點擊並確定點擊是否在一條線上...... – MadProgrammer
是的 - 這是完全正確的。你需要1)在一個面板(或等同物)中繪製你的圖像,2)添加一個「MouseListener」(觸發一個「事物已更改」事件),3)讓鼠標事件「重繪()」你的圖形對象, 4)子類「paint()」來調用你的圖形代碼。這裏有一個很好的教程:http://docs.oracle.com/javase/tutorial/2d/advanced/user.html – FoggyDay