2011-11-01 104 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成分,但实际上你可以在其他时间也使用它。您可能会发现设置组件的名称很有用,以便您可以轻松地找到它们。