Java学习day083 Swing用户界面组件(八:GUI程序排错)(调试技巧、让AWT机器人完成工作)

使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识。

day083   Swing用户界面组件(八:GUI程序排错)(调试技巧、让AWT机器人完成工作)


1.调试技巧

如果你看过Swing窗口,肯定想知道它的设计者如何把组件摆放得如此恰到好处,可以查看它的内容。按下Ctrl+Shift+Fl得到所有组件的层次结构输出:

如果设计你自己的定制Swing组件,但组件没能正确显示,你肯定很高兴有一个Swing图形化调试器。即使你没有写自己的组件类,能直观地看到如何绘制组件内容也是很有趣的。

可以使用JComponent类的setDebugGraphicsOptions方法打开对一个Swing组件的调试。有以下几个选项。

我们发现,要让闪烁选项起作用,必须禁用“双缓冲”—这是Swing更新窗口时为减少闪烁所用的策略。打开闪烁选项的魔咒是:

RepaintManager.currentManager(getRootPane()).setDoubleBufferingEnabled(false);
((JComponent) getContentPane()).setDebugCraphicsOptions(DebugCraphics.FLASH.OPTION);

只需要把这些代码行放在feme窗口构造器的末尾。程序运行时,你将看到会用慢动作填充内容窗格。或者,对于更本地化的调试,只需要为组件调用setDebugGraphicsOpticms。“控制狂人”可能还会设置闪烁的时间段、次数和颜色—详细信息参见DebugGmphics类的在线文档。

如果希望得到GUI应用中生成的每一个AWT事件的记录,可以在发出事件的每一个组件中安装一个监听器。利用反射,可以很容易地自动完成这个工作。下面给出了EventTracer类。

要查看消息,可以把希望跟踪事件的组件增加到一个事件跟踪器:

EventTracer tracer = newEventTracer();
tracer.add(frame);

这样一来,就可以得到所有事件的一个文本描述,如图。


2.让AWT机器人完成工作

Robot类可以向任何AWT程序发送按键和鼠标点击事件。这个类就是用来自动测试用户界面的。要得到一个机器人,首先需要得到一个GraphicsDevice对象。可以通过以下调用序列得到默认的屏幕设备:

GraphicsEnvironment environment = GraphicsEnvironment.getlocalGraphicsEnvironment();
GraphicsDevice screen = environinent.getDefaultScreenDevice():

然后构造一个机器人:

Robotro bot=new Robot(screen);

若要发送一个按键事件,需告知机器人模拟按下和松开按键:

robot.keyPress(KeyEvent.VK_TAB):

robot.keyRelease(KeyEvent.VK.TAB);

对于鼠标点击事件,首先需要移动鼠标,然后按下再释放鼠标按钮:

robot.mouseMove(x,y);//x and y are absolute screen pixel coordinates,

robot.nousePress(InputEvent.BUTTONl_MASK);

robot.mouseRelease(InputEvent.BUTTON1_MASK);

我们的思路是首先模拟按键和鼠标输入,然后截屏来查看应用是否完成了它该完成的工作。截屏需要使用createScreenCapture方法:

Rectangle rect = new Rectangle(x,y,width,height);

Bufferedlmage image=robot.createScreenCapture(rect):

矩阵坐标也指示绝对屏幕像素。最后,通常我们都希望在机器人指令之间增加一个很小的延迟,使应用能跟得上。可以使用delay方法并提供延迟时间(毫秒数)。例如:

robot.delay(1000);//delay by 1000 milliseconds

下面的程序显示了如何使用机器人。首先,按下空格键激活最左边的按钮。然后机器人会等待两秒,以便你能看到它做了什么。这个延迟之后,机器人会模拟按下Tab键和再按一次空格键,来点击下一个按钮。最后,它会模拟用鼠标点击第3个按钮。(要按下按钮,可能需要调整程序的x和y坐标。)程序的最后会截屏,并在另一个frame窗口中显示。

从这个例子可以看到,单凭Robot类本身并不能方便地测试用户界面。实际上,这只是一个基本构建模块,可以作为测试工具的一个基础部分。专业的测试工具可以捕获、存储和重放用户交互场景,并得到组件在屏幕上的位置,这样就不用猜测鼠标点击的位置了。


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值