Formulários dinâmicos (desktop)

É possível criar formulários dinâmicos em aplicações desktop?

O cliente quer uma aplicação nos moldes dos formulários do Google Docs, na opção "Criar Novo > Formulário".
Funcionará da seguinte forma:
O usuário monta o formulário dinamicamente, escolhendo o tipo de campo(inputText, textArea, combobox, radiobutton, labels) e adicionando até completar o form na tela.

Qualquer ajuda é benvinda.

[]'s

Em Java considero ser mais complicado. Em Flex o pessoal da empresa usou um arquétipo pra fazer isso. Basicamente vc guarda informações sobre uma ficha (formulário) em um xml chamado arquétipo, que descreve o formulário e depois faz um renderizador para esse arquétipo. Inclusive os dados dos formulários são indexados no BD. Assim vc teria o arquétipo que seriam as regras gerais do seu formulário e depois teria uma estrutura que indicaria os valores dos campos. Vou ver se acho um exemplo pq acho que vai ser difícil explicar apenas descrevendo.

Imaginei que teria que utilizar Flex ou JavaFX pra esse projeto.
Infelizmente não terei tempo pra estudar uma dessas tecnologias pois o prazo é curto, pra variar =).
Obrigado!

Não que precise utilizar Flex ou JavaFX, mas se for com Swing acredito ser um pouco mais difícil.

Você quer fazer formulários de cadastros que são armazenados em banco de dados? Se for tem como sim. Eu estou utilizando para montar meus cadastros de forma dinâmica

Nos dê uma ajuda amigo. Como você está fazendo isso de forma dinâmica?

Eu gostaria de fazer formulários de cadastro de entidades de forma dinâmica… Queria que a aplicação gerasse um formulário diferente para cada entidade que eu fornecesse o cadastro.

Grato

Diego

Existe um sistema chamado FCKForms feito em PHP a qual faz isso que vc quer.
De uma olhada que talvez clarei sua mente e vc possa emplementar isso em java.
Pois acho que nao existe ainda. E se existir isso nao sera gratis

Bons Codigos

Oi,

Gostaria de entender melhor,o que quer dizer com formulários dinâmicos… :roll:

[quote=david.cs20]Existe um sistema chamado FCKForms feito em PHP a qual faz isso que vc quer.
De uma olhada que talvez clarei sua mente e vc possa emplementar isso em java.
Pois acho que nao existe ainda. E se existir isso nao sera gratis

Bons Codigos[/quote]

Pode até ser…mas é preciso saber se ninguém nunca fez isso antes mesmo…

[quote=Anime]Oi,

Gostaria de entender melhor,o que quer dizer com formulários dinâmicos… :roll: [/quote]

Seriam formulários no SWING, que seriam gerados para que o usuário inserisse os dados para preencher os atributos de uma classe. Isso, sem haver programação manual para cada formulário (só customizações).

Poderiam ser formulários gerados dentro de um JPanel, para que fosse incluído no JFrame o formulário correspondente à entidade correta que quero adicionar/editar.

Por exemplo:
Para a classe Cliente abaixo:

/**
 * Entidade cliente.
 */
public class Cliente implements Serializable {

    private static final long serialVersionUID = 1L;
    private Long id;
    private String razaoSocial;
    private String endereco;
    private String telefone;

Houvesse uma biblioteca que, fornecendo a classe da entidade como argumento, geraria um formulário capaz de criar/alterar objetos Cliente

O exemplo é simples… mas tenho que ficar fazendo telas de cadastro para muuuuuuuuuuuiiiitas entidades…e ficar fazendo a tela, adicionando os botões, gerando os eventos, etc… dá bastante trabalho. Agora mesmo, preciso fazer formulários de cadastro para 6 entidades…

Gostaria que só retornasse um novo objeto da entidade ou que alterasse um determinado objeto, mas que o formulário para isso fosse (ao menos) semi-automático, sem eu precisar fazê-lo sempre do zero.

Alguém??

Oi diego_qmota,

Não sei se entendi,mas é facil fazer isso no Netbeans,depois de criar o JPanel com todos os componentes,clique com o botão direito no JPanel e escolha (Salve As Template),escolha Java GUI Forms e ok.Para abrir vc deve clicar em cima do pacote com o botão direito,New,File/Folder…Em File Types vai encontrar o que vc salvou,clique nele e next mude o nome se quiser e finish.Pronto vc pode reaproveita-lo fazendo algumas alterações se necessario… :wink:

Se entendi mal,desculpe… :roll:

Oi Anime,

Eu gostaria de uma solução que na realidade já criasse o JPanel do formulário (que você mencionou). Sem eu precisar criar e inserir os componentes.

Vou mostrar um exemplo hipotético:

A classe Cliente (da entidade) provavelmente deveria usar Annotations para descrever os campos que receberiam o valor dos atributos (ou se não tivessem anotações, seria o JTextField por default).

public class Cliente {

@CampoForm (tipo="JTextField", tamanho=100, document="Texto")
private String razaoSocial;

...
}

Existiria uma classe Factory que gera o formulário (por ex: FormFactory). Ela receberia a classe da entidade (Classe Cliente) como argumento do método FormFactory.createNewForm e me retornasse um JPanel de formulário.

JFrame janela = new JFrame();
janela.setLayout( new BorderLayout() );

//Criação de formulário
JPanel painelPrincipal = FormFactory.createNewForm( Cliente.class );

janela.add( painelPrincipal, BorderLayout.CENTER );
...

O formulário gerado poderia receber um objeto Cliente para editar (e retornar esse objeto editado também) ou já criar um novo objeto na inicialização. O formulário deveria já conter todos os controles para editar, salvar e lidar com os valores dos atributos.
Para listas de objetos, poderia gerar um formulário CRUD com controles Adicionar, Excluir, Editar… Para um objeto isolado, somente os campos para editar um objeto somente.

Criando formulário para novo objeto Cliente:

//FormFactory.createNewForm( Cliente.class ) retornaria JPanelForm que estende JPanel

//Cria um novo objeto Cliente na inicialização do formulário
JPanelForm <Cliente> form = FormFactory.createNewForm( Cliente.class );

Editando um objeto Cliente:


Cliente cli = new Cliente ("Rox Ltda");
JPanelForm <Cliente> form = FormFactory.createNewForm( Cliente.class, cli );

//criação de janela, incorporação de Jpanel, etc...
...

Cliente cliEditado = form.getEntity();   //retorna o objeto cli alterado

Mas esses exemplos são hipotéticos. Gostaria de saber se uma solução parecida existe de verdade:smiley:

[quote=diego_qmota]Oi Anime,

Eu gostaria de uma solução que na realidade já criasse o JPanel do formulário (que você mencionou). Sem eu precisar criar e inserir os componentes.

Vou mostrar um exemplo hipotético:

A classe Cliente (da entidade) provavelmente deveria usar Annotations para descrever os campos que receberiam o valor dos atributos (ou se não tivessem anotações, seria o JTextField por default).

public class Cliente {

@CampoForm (tipo="JTextField", tamanho=100, document="Texto")
private String razaoSocial;

...
}

Existiria uma classe Factory que gera o formulário (por ex: FormFactory). Ela receberia a classe da entidade (Classe Cliente) como argumento do método FormFactory.createNewForm e me retornasse um JPanel de formulário.

JFrame janela = new JFrame();
janela.setLayout( new BorderLayout() );

//Criação de formulário
JPanel painelPrincipal = FormFactory.createNewForm( Cliente.class );

janela.add( painelPrincipal, BorderLayout.CENTER );
...

O formulário gerado poderia receber um objeto Cliente para editar (e retornar esse objeto editado também) ou já criar um novo objeto na inicialização. O formulário deveria já conter todos os controles para editar, salvar e lidar com os valores dos atributos.
Para listas de objetos, poderia gerar um formulário CRUD com controles Adicionar, Excluir, Editar… Para um objeto isolado, somente os campos para editar um objeto somente.

Criando formulário para novo objeto Cliente:

//FormFactory.createNewForm( Cliente.class ) retornaria JPanelForm que estende JPanel

//Cria um novo objeto Cliente na inicialização do formulário
JPanelForm <Cliente> form = FormFactory.createNewForm( Cliente.class );

Editando um objeto Cliente:


Cliente cli = new Cliente ("Rox Ltda");
JPanelForm <Cliente> form = FormFactory.createNewForm( Cliente.class, cli );

//criação de janela, incorporação de Jpanel, etc...
...

Cliente cliEditado = form.getEntity();   //retorna o objeto cli alterado

Mas esses exemplos são hipotéticos. Gostaria de saber se uma solução parecida existe de verdade:smiley:
[/quote]

Bem eu faço da seguinte forma. Eu possuo minhas anotações na qual eu marco qual campo eu quero criar no meu formulário, parecido com sua anotação @CampoForm. Eu possuo uma classe que cria os camponentes do formulário baseado nas anotações. Um outra alternativa que também da certo e você criar um banco de dados com as configurações de seus campos.

Você poderia divulgar aqui a classe que usa para criar os componentes do formulário?