Preciso de algumas Dicas para Desktop app

26 respostas
Lavieri

Estou fazendo um applicativo para uma Locadora de veiuculos, porem sou pessimo em Montar as telas do meu applicativo…

Gostaria de saber qual é a melhor abordagem para criação de telas, algum tutorial ensinando como separar as partes de um APP desktop e como montar as telas, sei que isso é um trablaho + para designer mais estou precisando muito disso, para montar de uma forma descente a minhas telas, e não ficar cada tela com uma cara diferente…

26 Respostas

A

Utilizei o framework Swing Bean para um projeto swing.

Ele monta as telas a partir de Xml e mantém um padrão para as telas.

http://swingbean.sourceforge.net/

Lavieri

Arnaldo Caetano:
Utilizei o framework Swing Bean para um projeto swing.

Ele monta as telas a partir de Xml e mantém um padrão para as telas.

http://swingbean.sourceforge.net/

Não gosto da ideia de montar telas a partir de XML o.O … isso facilitaria modificações depois do projeto pronto, além de ter que ler, parsear e etc um monte de arquivo pra montar telas =/ … não sei a principio não gosto da ideia… mais vou olhar, pra ver como é o projeto, e ver c me da 1 luz

A

O framework toma conta do XML. O Xml é utilizado para definir o layout da tela, campos, mascaras, tipos de componentes. Ele também devolve um objeto preenchido com os dados de input do usuário.

Eu fiz este projeto na facul com ele.

Lavieri

é so que não da pra ver o projeto…

as telas não rodam… falta o banco de dados (obviamente) e etcs… não da pra analizar o código… pq não conheço o projeto, então infelismente continou na mesma… =/

M

Olá Lavieri. Novamente pergunto, e o VE? Não obteve sucesso? Ou não supriu as necessidades?

Lavieri

Noop… com o VE não consigo o mesmo resultado que montar as telas no Netbeans, porem no netbeans eu fico muito amarrado…

Minha solução foi criar o projeto no Eclipse, importar o projeto para o NetBeans… ai eu trabalho com as 2 IDEs abertas… fico montando telas no Netbeans, praticamente não entendo bem o código, principalmente como ele organiza o layout O.O … ai vou pro eclipse, monto os códigos as pesquisas, e outras coisas, em classes separado… e no netbeans vou onde quero e faço personalizar código… e insiro minhas coisas =/

sei que é horrivel fazer isso … mais é a vida =/

EDIT:
Ahh!! eu ainda não tive muito sucesso em montar as telas separadar no NetBeans para juntar depois em unico frame… ele fica reclamando falando pra eu ter certeza que é um componente grafico =/ … IDE meio tosco o netbeans=/

M

Noop… com o VE não consigo o mesmo resultado que montar as telas no Netbeans, porem no netbeans eu fico muito amarrado…

Minha solução foi criar o projeto no Eclipse, importar o projeto para o NetBeans… ai eu trabalho com as 2 IDEs abertas… fico montando telas no Netbeans, praticamente não entendo bem o código, principalmente como ele organiza o layout O.O … ai vou pro eclipse, monto os códigos as pesquisas, e outras coisas, em classes separado… e no netbeans vou onde quero e faço personalizar código… e insiro minhas coisas =/

sei que é horrivel fazer isso … mais é a vida =/

EDIT:
Ahh!! eu ainda não tive muito sucesso em montar as telas separadar no NetBeans para juntar depois em unico frame… ele fica reclamando falando pra eu ter certeza que é um componente grafico =/ … IDE meio tosco o netbeans=/

Puxa, que pena… trabalhar com duas IDEs deve ser complicado (ainda mais quando não se gosta de uma delas :slight_smile: ).

De qualquer forma, boa sorte e se precisar, estaremos aqui! :wink:

Lavieri

hehe basta vc me falar, como no VE eu consigo criar frames com o mesmo tipo de layout drag drop do Netbeans, onde ele organiza os objetos tomando outros objetos como referencia, eu vejo que ele cria uns GroupLayout sai alinhando não sei bem como… e montando a tela…

O que queria era conseguir montar a tela + ou - como é possivle no Netbeans, e não ficar tão preso ao código =/

M

Como você deve saber, o Netbeans usa o GridBagLayout, um gerenciador muito poderoso, porém bem complexo. Para poder usá-lo, você pode definir o gerenciador do seu painél como GridBagLayout, adicionar os componentes onde quiser e para ajustar o alinhamento, tamanho, espaçamento, etc. basta clicar com o botão direito sobre o componente e escolher ‘Costumize layout’.

Lavieri

Por exemplo... no VE eu tenho uma enorme dificuldade de fazer um tela simples como essa abaixo

que é assim antes de ser carregada....
[img]http://img142.imageshack.us/img142/7396/temp2hh1.png[/img]

e assim depois de carregada...
[img]http://img264.imageshack.us/img264/5797/tempaq8.png[/img]

ele simplismente não faz o alinhamento do imgLabel com a lateral esquerda, e do combo box montadora , e depois o alinhamento do modelo... =/

Não fica legal no VE, não sei c sou eu q não entendo.... mais é triste isso...

Porem o código gerado pelo netbeans é algo no sense!
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(imgMontadora, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addGap(21, 21, 21)
                        .addComponent(cbxMontadora, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(imgModelo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addComponent(jLabel2)
                        .addGap(18, 18, 18)
                        .addComponent(cbxModelo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(imgModelo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(cbxModelo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel2)))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(imgMontadora, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(6, 6, 6)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(cbxMontadora, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel1))))
                .addContainerGap(17, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 404, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(105, Short.MAX_VALUE))
        );
M

Veja só esse pequeno programa que é bem parecido com o seu (o que eu fiz não tem parte lógica alguma, só o leiaute mesmo).

Código:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.border.TitledBorder;
import java.awt.Font;
import java.awt.Color;

public class Teste extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JLabel jLabel = null;
	private JLabel jLabel1 = null;
	private JComboBox jComboBox = null;
	private JComboBox jComboBox1 = null;
	private JLabel jLabel2 = null;
	private JLabel jLabel3 = null;

	/**
	 * This is the default constructor
	 */
	public Teste() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(400, 250);
		this.setMinimumSize(new Dimension(400, 250));  // Generated
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			GridBagConstraints gridBagConstraints8 = new GridBagConstraints();
			gridBagConstraints8.gridx = 2;  // Generated
			gridBagConstraints8.fill = GridBagConstraints.BOTH;  // Generated
			gridBagConstraints8.gridy = 2;  // Generated
			jLabel3 = new JLabel();
			jLabel3.setText("Modelo:");  // Generated
			GridBagConstraints gridBagConstraints7 = new GridBagConstraints();
			gridBagConstraints7.gridx = 0;  // Generated
			gridBagConstraints7.fill = GridBagConstraints.BOTH;  // Generated
			gridBagConstraints7.gridy = 2;  // Generated
			jLabel2 = new JLabel();
			jLabel2.setText("Montadora:");  // Generated
			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
			gridBagConstraints3.fill = GridBagConstraints.VERTICAL; // Generated
			gridBagConstraints3.gridy = 2; // Generated
			gridBagConstraints3.weightx = 1.0; // Generated
			gridBagConstraints3.gridx = 3; // Generated
			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
			gridBagConstraints2.fill = GridBagConstraints.VERTICAL; // Generated
			gridBagConstraints2.gridy = 2; // Generated
			gridBagConstraints2.weightx = 1.0; // Generated
			gridBagConstraints2.gridx = 1; // Generated
			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
			gridBagConstraints1.gridx = 2; // Generated
			gridBagConstraints1.fill = GridBagConstraints.BOTH; // Generated
			gridBagConstraints1.weightx = 1.0; // Generated
			gridBagConstraints1.weighty = 1.0; // Generated
			gridBagConstraints1.gridwidth = 2;  // Generated
			gridBagConstraints1.gridy = 0; // Generated
			jLabel1 = new JLabel();
			jLabel1.setText("Label foto modelo"); // Generated
			jLabel1.setHorizontalAlignment(SwingConstants.CENTER); // Generated
			GridBagConstraints gridBagConstraints = new GridBagConstraints();
			gridBagConstraints.gridx = 0; // Generated
			gridBagConstraints.weightx = 1.0; // Generated
			gridBagConstraints.weighty = 1.0; // Generated
			gridBagConstraints.anchor = GridBagConstraints.CENTER; // Generated
			gridBagConstraints.fill = GridBagConstraints.BOTH; // Generated
			gridBagConstraints.gridwidth = 2;  // Generated
			gridBagConstraints.gridy = 0; // Generated
			jLabel = new JLabel();
			jLabel.setText("Label logo marca"); // Generated
			jLabel.setHorizontalAlignment(SwingConstants.CENTER);  // Generated
			jContentPane = new JPanel();
			jContentPane.setLayout(new GridBagLayout());
			jContentPane.setBorder(BorderFactory.createTitledBorder(null, "Modelos", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("DejaVu Sans", Font.PLAIN, 13), Color.black));  // Generated
			jContentPane.add(jLabel, gridBagConstraints);  // Generated
			jContentPane.add(jLabel1, gridBagConstraints1);  // Generated
			jContentPane.add(getJComboBox(), gridBagConstraints2);  // Generated
			jContentPane.add(getJComboBox1(), gridBagConstraints3);  // Generated
			jContentPane.add(jLabel2, gridBagConstraints7);  // Generated
			jContentPane.add(jLabel3, gridBagConstraints8);  // Generated
		}
		return jContentPane;
	}

	/**
	 * This method initializes jComboBox
	 * 
	 * @return javax.swing.JComboBox
	 */
	private JComboBox getJComboBox() {
		if (jComboBox == null) {
			jComboBox = new JComboBox(new String[] { "", "Marca 1", "Marca 2" });
		}
		return jComboBox;
	}

	/**
	 * This method initializes jComboBox1
	 * 
	 * @return javax.swing.JComboBox
	 */
	private JComboBox getJComboBox1() {
		if (jComboBox1 == null) {
			jComboBox1 = new JComboBox(new String[] { "", "Modelo 1",
					"Modelo 2", "Modelo 3" });
		}
		return jComboBox1;
	}

}

Tudo usando o VE (só a parte de adicionar os nomes no JComboBox que foi manual). Veja o comportamento do programa executando-o e redimensionando, etc. e depois diga se é algo assim que você precisa.

M

Desculpe, post duplicado. :oops:

Lavieri

como deixar o estilo dos Combox parecido com o que o netbeans usa ?? esse do java eu axo muito feio =x… prefiro o do netbeans que parece + com windows…

Outra coisa, o que vc fez não tem espaçamentos entre os combox, e entre os imgLabel, como colocar o espaçamento no VE ??

vlw ai vou dar uma olhada no código bem direitinho mais a minha itenção é conseguir repoduzilo…

outra coisa… quando eu redimensiono o painel… ele muda o que ta dentro… não queria isso… queria que ficasse como esta dentro =/

nesse código que vc fez, quando eu maximizo a tela… ele aumenta tudo =/

correainfo

Lavieri tente utilizar esse plugin para o eclipse. Como ele vc consegui abrir telas feitas pelo netbeans, VE, etc…

Plugin para o Eclipse Jigloo

Espero que te ajude no layout

Lavieri

correainfo:
Lavieri tente utilizar esse plugin para o eclipse. Como ele vc consegui abrir telas feitas pelo netbeans, VE, etc…

Plugin para o Eclipse Jigloo

Espero que te ajude no layout

vou testar… minha itenção é usar algo funcional, que seja facil de usar… e que de pra montar telas tão bem quanto é possivel no netbeans, porem sem gerar um código tão amarrado como o do netbeans =/

M

Para deixar o look and fell parecido com o do SO, mude as preferências do VE (entre no menu Window -> Preferences -> Java -> Visual Editor e escolher qual LookAndFell quer usar).

Quanto ao espaçamento, basta clicar com o botão direito no(s) componente(s) que quer espaçar, clique com o botão direito e escolha
Costumize Layout. Lá tem o espaçamento de cada lado (top, bottom, left e right).

Quando ao redimensionamento, pensei que fosse isso que queria… para não fazer mais isso, basta na página de Costumize Layout desselecionar os botões Fill (horizontal e vertical).

Fernando_Generoso_da

Utilize o Jgoodies para fazer as telas. Forms, para o layout e looks para LookAndFeel. Rápido e fácil de codificar.

http://www.jgoodies.com/

Fernando

Lavieri

Fernando Generoso da Rosa:
Utilize o Jgoodies para fazer as telas. Forms, para o layout e looks para LookAndFeel. Rápido e fácil de codificar.

http://www.jgoodies.com/

Fernando

MUITOOOO obrigado… so de sair do netbeans e não ter q ficar em 2 IDEs já é um alivio…

a Principio esta montando tudo… o código la atraz parece ser bagunçado… mais vou tentar usar e ver no que da… teve uma hora que ele me perguntou c eu keria criar public get e setters… e depois não vi mais a opção… ele a principio faz igual o Netbeans de deixar o código inteiro num mesmo método… mas vou tentar ver isso…

brigadao ^^

renzonuccitelli

Lavieri, dá uma lida no GroupLayout. Eu uso ele para fazer telas, em conjunto com o Border. E perceba que ele é exatamente o tipo de Layout utilizado pelo NB.
Quanto ao LookAndFeel, basta colocar essa linha de código ao iniciar sua aplicação:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

Quanto aos forms, eu tb uso o SwingBean. Vc não precisa fazer parse nenhum com ele, só configura as telas via XML. Além de já ter um padrão de componente para cada tipo, ele também permite vc customizar seus próprios componentes. Como exemplo, na minha aplicação eu criei um TextField para fazer o controle de valores monetários, e coloque que quando a propriedade do Bean for BigDecimal, ele deve utilizar meu componente como padrão.

Olhá um exemplo de tela de cadastro de um cliente:

@Entity
public class Cliente implements Identifiable<Long> {
	
	
	private Long codigo;
	private String nome;
	private String nomeNormalizado;
	private String sobrenome;
	private String sobrenomeNormalizado;
	private String enderecoResidencial;
	private String cepResidencial;
	private String enderecoComercial;
	private String tel;
	private String tel2;
	private String telComercial;
	private String ramal;
	private String nextel;
	private String cel;
	private String mail;
	private String anotacao;
	private Date dataPagamento;
	private BigDecimal valorDevido;
	
	
	
	private Collection<Pagamento> pagamentos=new ArrayList<Pagamento>();
	
//getters e setters	
	
}
XML relativo a tela de cadastro:
<?xml version="1.0" encoding="UTF-8"?>

<beanDescriptor>
	<line>
		<property name='nome'  colspan='1' />
		<property name='sobrenome'  colspan='2'/>
	</line>
	<line>
	
		<property name='enderecoResidencial'  />
		<property name='cepResidencial'  label='CEP' mask='#####-###' dlu='40' />
	</line>
	<line>
		<property name='enderecoComercial'  />
	</line>
	<line>
		<property name='tel' label='Telefone' mask="(##) ####-####" dlu='66'/>
		<property name='tel2' label='Telefone - 2' mask="(##) ####-####" dlu='66'/>
		<property name='cel' label='Celular' mask="(##) ####-####" dlu='66'/>
	</line>
		
	<line>
		<property name='nextel' label='Nextel' dlu='66' />
		<property name='telComercial' label='Telefone Comercial' mask="(##) ####-####" dlu='66' />
		<property name='ramal' dlu='66'  />
	</line>
	<line>	
		<property name='mail'  dlu='110'/>
	</line>
	<line>
		<property name='anotacao' label='Anotações' type='LARGE_TEXT'  />
	</line>

Algumas considerações:

Se vc for usar Hibernate ou JPA, vc já vai ter que fazer os Beans, entao a classe já serviria para as duas coisas.
Vc pode fazer várias telas para o mesmo bean, bastanto fazer outro XML. No meu caso, eu tenho uma tela Cliente resumido, que só apresenta as principais informações.
O SwingBean ainda fornece o BeanTableModel, que vc pode utilizar para colocar os beans em tabelas de maneira rápida, e para alterar a tabela fica fácil, já que é só mexer em poucas propriedades do xml.

Fica aí a opinião...

Lavieri

eu tenho meus beans, porem nem todos os parametros tem métodos sets (o hibernate não verifica os métodos, e usa diretamente a pripriedade, mesmo ela sendo private) …

Por exemplo nesse seu XML, como proceder caso vc queira interações ?? no meu caso, sempre que eu seleciono um modelo, na lista, a imagem do modelo é carregado em outro label, eu não sei, XML pra montar UI não sei c vale a pena, vou baixar esse seu exemplo, e ler o códgo…

vlw pelo look and feel ^^

renzonuccitelli

Eu sei que ele suporta combo dependente, mas acao no Combo já não sei não. Na pior das Hipóteses, vc poderia construir seu combo personalizado e criar sua própria propriedade no XML. Mas acho que seria melhor vc perguntar no fórum do projeto primeiro, o Guerra não demora pra responder…
Quanto ao XML, sei que parece estranho no ínicio, mas depois fica trankilo, ainda mais para retirar ou colocar propriedades…

Quanto aos parametros que nao possuem método set, vc poderia pedir pra IDE criar (pelo menos o Eclipse faz isso autmaticamente) e deixá-los como private. No Hibernate eu prefiro que ele use os métodos set em vez de atribuir valor ao atributo diretamente, já que as vezes coloco alguma lógica adicional nos método Set…

renzonuccitelli

Olhei na home do framework e na seção como fazer existe um método associateAction() que vc pode utilizar para executar alguma coisa quando uma propriedade mudar. Não me lembro de ter isso na documentação da última vez que vi, to achan do que o Guerra atualizou…

renzonuccitelli

Ah, ainda lembrei de uma coisa vendo a documentação, o TableModel que ele implementa fornece algumas opções de filtragem que pode te ajudar no que vc queria fazer, de filtrar sem acessar o BD, dá uma olhada na documentação.

Lavieri

Como faz isso ?? pq o hibernate não os usa, não por default, só se existir alguma forma de configurar, mais as vezes, com as logicas e tudo, ele não o faz =/ …acessa sempre o field diretamente =/

renzonuccitelli

Pois é, descobri esses dias. Foi vc que perguntou como fazer isso em um tópico?

Então no Manning Java Persistence with Hibernate, usando JPA, ele diz que vc pode colocar as anotações nos atributos ou nos métodos get. Se vc deixar nos atributos, ele vai setar os valores diretamente, se for nos métodos get, ele usa os métodos set para atribuir valores aos atributos. Não cheguei a testar pra ver se é isso mesmo, mas faz sentido, já q poderia padronizar colocar no método ou atributo…

Lavieri

renzonuccitelli:
Pois é, descobri esses dias. Foi vc que perguntou como fazer isso em um tópico?

Então no Manning Java Persistence with Hibernate, usando JPA, ele diz que vc pode colocar as anotações nos atributos ou nos métodos get. Se vc deixar nos atributos, ele vai setar os valores diretamente, se for nos métodos get, ele usa os métodos set para atribuir valores aos atributos. Não cheguei a testar pra ver se é isso mesmo, mas faz sentido, já q poderia padronizar colocar no método ou atributo…

Fazendo sentido ou não… fiz testes aqui, e mesmo colocando as anotações no método get, ou no método set, ele não os usa… sempre vai direto no field =/ … c vc conseguir fazer acessar os sets, me avisa

Criado 24 de janeiro de 2009
Ultima resposta 29 de jan. de 2009
Respostas 26
Participantes 6