2013-02-16 33 views
0

我正在開發一些java中的可視化。我有一個問題,但。我在我的程序中繪製了一個Arc2D,並且我想將一個MouseInputListener添加到我的Arc2D中。問題是,一個Arc2D對象伸展在一個矩形上,而不僅僅是被繪製的線條。所以當我想要得到一個鼠標懸停效果時,它對於整個矩形而不僅僅是Arc2D的線條。你們有沒有解決這個問題的方法?Arc2D上的MouseInputListener java

我的代碼如下所示:

final Arc2D arc = 
    new Arc2D.Double(x_pos, 10, x2_pos-x_pos, 190, 0, 360, Arc2D.OPEN); 
JPanel jp = new JPanel(); 
addMouseInputListener(new MouseInputAdapter() { 
    @Override 
    public void mouseMoved(MouseEvent e) { 
     System.out.println("X: " + e.getX() + " Y: " + e.getY() + 
     " Does it touch the arc?: " + arc.contains(e.getX(), e.getY())); 
    } 
    // More MouseInputListener methods... 
}); 
ga.draw(arc); 
+0

你檢查過弧的'PathIterator'嗎? – trashgod 2013-02-16 14:48:36

+0

包含的是Shape(封閉形狀)的方法,該區域不是曲線。 – Aubin 2013-02-16 14:49:49

回答

0

您需要從曲線計算距離的點。然後看看它是否在離曲線適當的距離內。你不會想要一個只有1像素厚的熱點?!

要做到這一點並不像看起來那麼容易。你需要採取

rsquared = pow((e.getX()-circle_centre.x),2) + pow(e.getY()-circle_centre.y,2); 

,然後看它是否位於一個區間

rsquared<circle_radius+threshold && rsquared>circle_radius-threshold 

再檢查角度

angle = Math.atan2(e.getX()-circle_centre.y, e.getY()-circle_centre.y); 

它必須位於你想作爲間隔好。

+0

這將適用於圓形,但如果我將圓弧繪製爲橢圓而不是圓形,該怎麼辦? – user1090614 2013-02-26 23:07:36