Domanda

Nella nostra applicazione swing, stiamo usando uno strumento di test automatizzato a QA (Qf-Test) che funziona meglio quando i componenti sono chiamati a battente. (Chiamando Component.setName). Anche se le loro assegnazioni di nomi automatici funzionano abbastanza bene, stiamo introducendo componenti SwingX nel progetto e che sta causando alcuni problemi per lo strumento.

Ci sono un sacco di potenziali componenti su uno schermo (il tipico schermate di immissione dei dati di business app, ma molti di loro - l'applicazione è sul livello di complessità di un ERP), quali opzioni ci sono per la denominazione componenti Swing in un ragionevolmente maniera discreta?

È stato utile?

Soluzione

Io di solito memorizzare i campi in un JPanel in proprietà sul JPanel, in questo modo:

private JLabel firstNameLabel;
private JTextField firstNameTextField;

Al termine della routine che crea un'istanza e delinea questi componenti, è possibile eseguire una routine che usi java.lang.reflect collegare attraverso ogni proprietà del pannello. Se una proprietà scende dal Component di classe, è possibile chiamare setName su di esso con il nome della proprietà. Così, per esempio, si finirebbe per chiamare:

this.firstNameLabel.setName("firstNameLabel");
this.firstNameTextField.setName("firstNameTextField");

... se non attraverso java.lang.reflect

Si potrebbe anche avere la routine esaminare i nomi di casi irregolari delle variabili e sostituirlo con cassonetto con spazi. Questo li renderebbe più leggibile.

Questo approccio garantirà che non importa ciò che i componenti si aggiunge a un pannello, saranno tutti ottenere i nomi amichevoli.

Altri suggerimenti

Io in genere utilizzano un nome composto per tutti i miei componenti; il nome è costruita sul nome principale (ad esempio un JDialog) e il nome del campo (ottenuto per riflessione). Questo rende i nomi dei componenti unica nella maggior parte dei casi (è ancora possibile che i conflitti a seconda di come lo chiamate i genitori e come utilizzarli, ad esempio, se si apre diversi JInternalFrame e tutti hanno lo stesso nome ...)

Ho implementato una strategia di denominazione generica (che fa proprio questo) in Guts-GUI .

A proposito, nomi dei componenti non è solo interessante per il test dell'interfaccia utente, ma può anche essere utile per le strategie di iniezione di risorse (i18n dei componenti).

Come stai costruendo l'interfaccia? JFormDesigner e probabilmente la maggior parte degli altri editor permette di impostare il nome del componente automaticamente, che è molto utile. La maggior parte del tempo che non devo pensare ai nomi dei componenti a tutti. Uniche eccezioni sono i componenti che non sono immesse con JFormDesigner.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top