2011-11-01 44 views
2

我需要觸發一個MouseEvent鼠標點擊JLabel(或任何其他組件)。我該怎麼做呢?如何使用Robot類在組件上觸發點擊事件?

我嘗試了使用機器人類,如下所示:

try { 
    Robot r=new Robot(); 
    r.mouseMove(jl.gettX(), jl.getY());//jl is the JLabel 
    r.mousePress(InputEvent.BUTTON1_MASK); 
    r.mouseRelease(InputEvent.BUTTON1_MASK); 
} catch (AWTException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

getX()getY()正在返回組件父的x,y位置。如何獲得組件的絕對位置,以便我可以觸發Robot.mousePress()?有沒有其他方法可以觸發特定組件上的事件?

+0

爲什麼是負面投票?我在想?? – sasidhar

回答

3

您應該使用Component.getLocationOnScreen()來代替。該方法返回絕對座標。

+0

@mKorbel'getLocationOnScreen()'工作正常。爲什麼'getLocation()'而不是? – sasidhar

+1

我想知道同樣的事情。 'gLOS'是用來獲得'屏幕上的位置'的正確選擇。 @mKorbel如果你應該注意,爲什麼編輯? –

+0

嗯我要通過OP的JLabel,然後爲什麼要將JLabel轉換爲組件,但同意:-) – mKorbel

1

我會建議使用FEST-Swing它允許你寫的代碼看起來像這樣dialog.button("ok").click();

它通常用於測試Swing成分,但實際上你可以在其他時間也使用它。您可能會發現設置組件的名稱很有用,以便您可以輕鬆地找到它們。