Swing コンポーネントに名前を付ける戦略
-
26-09-2019 - |
質問
Swing アプリケーションでは、Swing コンポーネントに名前を付けるとより適切に機能する QA (Qf-Test) の自動テスト ツールを使用しています。(Component.setName の呼び出し)。自動名前割り当てはかなりうまく機能しますが、SwingX コンポーネントをプロジェクトに導入しているため、ツールにいくつかの問題が発生しています。
画面上には潜在的なコンポーネントが多数あります (通常のビジネス アプリのデータ入力画面ですが、その数は多く、アプリは ERP の複雑さレベルにあります)。目立たない方法でスイング コンポーネントに名前を付けるにはどのようなオプションがありますか?
解決
通常、次のように、JPanel のプロパティにフィールドを JPanel に保存します。
private JLabel firstNameLabel; private JTextField firstNameTextField;
これらのコンポーネントをインスタンス化してレイアウトするルーチンの最後に、次のルーチンを実行できます。 java.lang.reflect
パネルの各プロパティをループします。プロパティがクラスから派生した場合 Component
, 、電話することができます setName
物件名が書いてあります。したがって、たとえば、最終的には次のように呼び出されます。
this.firstNameLabel.setName("firstNameLabel"); this.firstNameTextField.setName("firstNameTextField");
...経由を除く java.lang.reflect
また、ルーチンで変数の不規則なケース名を検査し、それをスペースを含む標準的なケース名に置き換えることもできます。これにより、より読みやすくなります。
このアプローチにより、パネルにどのコンポーネントを追加しても、すべてにわかりやすい名前が付けられます。
他のヒント
私は通常、すべてのコンポーネントに複合名を使用します。名前は親名に基づいて構築されます (例: JDialog
) とフィールド名 (リフレクションによって取得)。これにより、ほとんどの場合、コンポーネント名が一意になります (親の名前の付け方や親の使用方法によっては、競合が発生する可能性があります。いくつか開けると JInternalFrame
そして全員同じ名前です...)
私は一般的な命名戦略(まさにそれを行う)を実装しました ガッツGUI.
ところで、コンポーネントの名前付けは UI テストにとって興味深いだけでなく、リソース注入戦略 (コンポーネントの i18n) にも役立つ場合があります。
インターフェースはどのように構築していますか?JFormDesigner とおそらく他のほとんどのエディターでは、コンポーネントの名前を自動的に設定できるため、非常に便利です。ほとんどの場合、コンポーネント名についてはまったく考える必要はありません。JFormDesigner を使用して配置されないコンポーネントのみが例外です。