阅读更多

10顶
1踩

编程语言

原创新闻 Swing Explorer介绍

2008-04-22 09:02 by 正式记者 cjnajr 评论(0) 有9660人浏览

试Swing应用时的常见陷阱
      调试Swing应用并不总是那么容易。由于swing是可视化的应用,所以你不可能写一个自动测试的程序来检测你的用户界面(UI)是否看起来不错,或者所有的组件是否都大小合适,颜色正确,而且还显示了应该显示的信息。通常你都只能够运行这个swing程序,看看屏幕上是否是你想要的样子。
     Ouch,我的屏幕看起来和我期望的不一样!
     呵呵,我们的问题开始了。让我们先来看看一些调试的例子吧。
     例1:我没有看见应该在JFrame上的组件
     可能的原因:

  • 没有把组件设置成“visible(可见的)”。
  • 忘记添加组件到容器上了。
  • 或者重载(override)了组件的paintComponent方法却忘记了写必要的代码,以至于尽管组件在正确的位置也无法显示。

    例2.两年前,同事和我开发了一个面板(panel)。我甚至不知道怎样构造这个组件。为什么它不在它应该呆的位置呢?为什么它会左移了5个像素呢?

    例3.我打算用java调试器(java debugger)一步一步地来调试我的程序,观察一下每当我往JFrame上添加一个组件时会发生什么。

    接下来,开始调试一下JFrame的代码吧。简单的代码如下所示。首先我们会展示一个空白的JFrame(setVisible(true)) ,接着一步一步地添加组件。然后,我们会设置一些断点(breakpoint)来看看UI的每一次改变都会发生什么。

 

public class FrameTest extends JFrame implements Runnable { public static void main(String[] args) { SwingUtilities.invokeLater(new FrameTest()); } public void run() { // this method runs in AWT dispatch thread setBounds(100, 100, 100, 100); setVisible(true); add(new JLabel("Hello")); // <-- 在此设置断点 add(new JTextField("Hello")); // 在此观察UI是否改变 } }


   

 

9ab1d637-6dc0-35e7-b0b1-362494af8980-thumb

    由于断点设置在添加组件之前,所以组件暂时不会显示出来。

     例4.我看见右上角有一个小圆点,为什么会出现这种情况呢?

     这种情况也很常见。一些组件由于计算不正确会导致一些点显示不正确。这样的情况如下图所示。

 

    好吧,这样的问题还有很多,所以就不要再看这些例子了。下面来谈谈如何来处理这些问题。

我们该怎么办?

    为了调试上面罗列的问题,通常需要做一些事情:

  • 插入一些调试代码块测试指定元件的位置,大小和可见性
  • 在运行时改变某些组件的边界颜色(或类似属性)以区别不同的组件
  • 使用debuggraphics自动描绘一些图形信息

    所有的这些方法都需要改写代码,然后在控制台中执行和检查。如果在运行时很多地方都需要改变的话,这些方法通常都很难跟踪分析。开发者就必须懂得在控制台中展示的内容和显示在屏幕上画面的联系和区别,但是这通常都不是很人行的做法。所以,开发者就需要一个可以交互的工具,可以在运行时提供关于UI程序的必要信息。

    我要介绍的这类工具叫做Swing Explorer。你可以在以下链接下载:swexpl.jar

    下图是一个swing程序的例子,我们可以把它加载到swing explorer中来测试一下各项特性。 

    加载的命令是java -cp swexpl.jar org.swingexplorer.Launcher sample.FRMPerson ,其中sample.FRMPerson是该swing 应用程序的启动类。

 

    加载之后如下图所示,它可以显示该应用的所有顶级容器,并以树形结构展示所有组件的层次关系。

 

 

 

    至于swing explorer的其他特性,你完全可以在使用的时候慢慢感受了。这里就略去不叙了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics