在我们的 Swing 应用程序中,我们在 QA (Qf-Test) 中使用了一个自动化测试工具,当 Swing 组件被命名时它会更好地工作。(调用 Component.setName)。尽管它们的自动名称分配工作得相当好,但我们正在将 SwingX 组件引入项目中,这给该工具带来了一些问题。
屏幕上有很多潜在组件(您的典型业务应用程序数据输入屏幕,但其中很多 - 应用程序处于 ERP 的复杂级别),有哪些选项可以以合理不显眼的方式命名摆动组件?
在我们的 Swing 应用程序中,我们在 QA (Qf-Test) 中使用了一个自动化测试工具,当 Swing 组件被命名时它会更好地工作。(调用 Component.setName)。尽管它们的自动名称分配工作得相当好,但我们正在将 SwingX 组件引入项目中,这给该工具带来了一些问题。
屏幕上有很多潜在组件(您的典型业务应用程序数据输入屏幕,但其中很多 - 应用程序处于 ERP 的复杂级别),有哪些选项可以以合理不显眼的方式命名摆动组件?
我通常将 JPanel 中的字段存储在 JPanel 上的属性中,如下所示:
私人 JLabel firstNameLabel; 私有 JTextField firstNameTextField;
在实例化和布置这些组件的例程结束时,您可以运行一个例程,用于java.lang.reflect
循环遍历面板的每个属性。如果一个属性是类的后代Component
,您可以使用该属性的名称来调用setName
它。例如,它最终会调用:
this.firstNameLabel.setName("firstNameLabel"); this.firstNameTextField.setName("firstNameTextField");
...除了通过java.lang.reflect
您还可以让例程检查变量的颠簸大小写名称,并将其替换为带空格的标准大小写。这将使它们更具可读性。
这种方法将确保无论您向面板添加什么组件,它们都将获得友好的名称。
我通常为所有组件使用复合名称;该名称基于父名称(例如 a JDialog
)和字段名称(通过反射获得)。这使得组件名称在大多数情况下都是唯一的(根据您命名父母的方式以及如何使用它们,您仍然可能存在冲突,例如,如果您打开多个JInternalFrame
并且都具有相同的名称......)
我在Guts-GUI中实现了一个通用命名策略(就是这样做的) 。
顺便说一句,组件命名不仅对 UI 测试很有趣,而且对资源注入策略(i18n of components)也可能有用。
你是如何构建界面的?JFormDesigner 和可能大多数其他编辑器都允许自动设置组件的名称,这非常方便。大多数时候我根本不需要考虑组件名称。唯一的例外是未使用 JFormDesigner 放置的组件。