Estratégia de atribuição de nomes de componentes swing
-
26-09-2019 - |
Pergunta
Em nosso Balanço aplicativo, nós estamos usando uma ferramenta de teste automatizado para controle de qualidade (Qf-Teste) que funciona melhor quando o swing componentes são nomeados.(Componente de chamada.setName).Apesar de seu nome automático atribuições de trabalho razoavelmente bem, nós estamos apresentando SwingX componentes para o projeto e que está a causar alguns problemas para a ferramenta.
Há um grande potencial de componentes em uma tela (o típico aplicativo de negócios ecrãs de entrada de dados, mas um monte deles - o aplicativo é o nível de complexidade de um ERP), que opções existem para a nomeação de swing componentes em um razoavelmente maneira discreta?
Solução
Eu normalmente armazenam os campos em um JPanel em propriedades no JPanel, como este:
private JLabel firstNameLabel; private JTextField firstNameTextField;
No final da rotina que cria e estabelece a esses componentes, você pode executar uma rotina que utiliza java.lang.reflect
para fazer um loop através de cada propriedade do painel.Se uma propriedade descende da classe Component
, você pode chamar setName
sobre ele com o nome da propriedade.Assim, por exemplo, seria acabam chamando:
this.firstNameLabel.setName("firstNameLabel"); this.firstNameTextField.setName("firstNameTextField");
...exceto por meio de java.lang.reflect
Você também pode ter a rotina de examinar o acidentado caso, nomes de variáveis e substituí-lo com o padrão de caso com espaços.Isso poderia torná-los mais legíveis.
Esta abordagem irá garantir que não importa o que componentes você adicionar ao painel, eles ficarão com nomes amigáveis.
Outras dicas
Eu geralmente uso um nome composto para todos os meus componentes; O nome é construído sobre o nome pai (por exemplo, JDialog
) e o nome do campo (obtido por reflexão). Isso torna os nomes de componentes únicos na maioria dos casos (você ainda pode ter conflitos, dependendo de como nomear os pais e como os usa, por exemplo, se você abrir vários JInternalFrame
E todos têm o mesmo nome ...)
Eu implementei uma estratégia de nomeação genérica (isso faz exatamente isso) em Guts-gui.
A propósito, a nomeação de componentes não é apenas interessante para testes de interface do usuário, mas também pode ser útil para estratégias de injeção de recursos (i18n de componentes).
Como você está construindo a interface? JFormDesigner e provavelmente a maioria dos outros editores permitem definir o nome do componente automaticamente, o que é muito útil. Na maioria das vezes, não preciso pensar nos nomes dos componentes. Somente exceções são componentes que não são colocados com jformDesigner.