Ajuda em JGoodies!

2 respostas
Fernando_Romulo_da_S

Ola galera…

Estou iniciando em JGoodies. Estou refazendo o exemplo do artigo de interface gráficas com o JGoodies Binding da revista javamagazine 39 e não estou consiguindo fazer binding de beans com atriubutos em Calendar e Integer, da um monte erros vejam:

Exception in thread "AWT-EventQueue-0" com.jgoodies.binding.beans.PropertyAccessException: Failed to set an adapted Java Bean property.
cause=java.lang.IllegalArgumentException: argument type mismatch
bean=Floriano Peixoto
bean type=br.com.fipp.jgoodies.business.entity.Cliente
value=21
value type=java.lang.String
property name=dtCadastro
property type=java.util.Calendar
property setter=public void br.com.fipp.jgoodies.business.entity.Cliente.setDtCadastro(java.util.Calendar)
	at com.jgoodies.binding.beans.PropertyAccessException.createWriteAccessException(PropertyAccessException.java:133)
	at com.jgoodies.binding.beans.BeanUtils.setValue(BeanUtils.java:634)
	at com.jgoodies.binding.beans.BeanAdapter.setValue0(BeanAdapter.java:1191)
	at com.jgoodies.binding.beans.BeanAdapter.access$600(BeanAdapter.java:279)
	at com.jgoodies.binding.beans.BeanAdapter$SimplePropertyAdapter.setValue(BeanAdapter.java:1382)
	at com.jgoodies.binding.adapter.TextComponentConnector.setSubjectText(TextComponentConnector.java:297)
	at com.jgoodies.binding.adapter.TextComponentConnector.updateSubject(TextComponentConnector.java:235)
	at com.jgoodies.binding.adapter.TextComponentConnector$TextChangeHandler.insertUpdate(TextComponentConnector.java:350)
	at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:184)
	at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:754)
	at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:711)
	at javax.swing.text.PlainDocument.insertString(PlainDocument.java:114)
	at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:673)
	at javax.swing.text.JTextComponent.replaceSelection(JTextComponent.java:1099)
	at javax.swing.text.DefaultEditorKit$DefaultKeyTypedAction.actionPerformed(DefaultEditorKit.java:839)
	at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1571)
	at javax.swing.JComponent.processKeyBinding(JComponent.java:2763)
	at javax.swing.JComponent.processKeyBindings(JComponent.java:2798)
	at javax.swing.JComponent.processKeyEvent(JComponent.java:2726)
	at java.awt.Component.processEvent(Component.java:5265)
	at java.awt.Container.processEvent(Container.java:1966)
	at java.awt.Component.dispatchEventImpl(Component.java:3955)
	at java.awt.Container.dispatchEventImpl(Container.java:2024)
	at java.awt.Component.dispatchEvent(Component.java:3803)
	at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1810)
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:672)
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:920)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:798)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:636)
	at java.awt.Component.dispatchEventImpl(Component.java:3841)
	at java.awt.Container.dispatchEventImpl(Container.java:2024)
	at java.awt.Window.dispatchEventImpl(Window.java:1778)
	at java.awt.Component.dispatchEvent(Component.java:3803)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.jgoodies.binding.beans.BeanUtils.setValue(BeanUtils.java:621)
	... 37 more

de uma olhada no codigo do meu bean Cliente

public class Cliente extends Model
{
	private static final long serialVersionUID = -208760893029673800L;
	
	public static final String PROPERTY_ID = "id";
	public static final String PROPERTY_NOME = "nome";
	public static final String PROPERTY_RG = "rg";
	public static final String PROPERTY_NASCIMENTO = "dtNascimento";
	public static final String PROPERTY_CADASTRO = "dtCadastro";
	
	private Integer id;
	private String nome;
	private String rg;
	private Calendar dtNascimento;
	private Calendar dtCadastro;
	

	public Cliente()
	{
		super();
	}
	
	/**
	 * @param id
	 * @param nome
	 * @param rg
	 * @param dtNascimento
	 * @param dtCadastro
	 */
	public Cliente(Integer id, String nome, String rg, Calendar dtNascimento, Calendar dtCadastro)
	{
		super();
		this.id = id;
		this.nome = nome;
		this.rg = rg;
		this.dtNascimento = dtNascimento;
		this.dtCadastro = dtCadastro;
	}
	
	
	/**
	 * Metodo que retorna um atributo
	 * @return dtCadastro
	 */
	public Calendar getDtCadastro()
	{
		return dtCadastro;
	}
	/**
	 * Metodo que altera um atributo
	 * @param dtCadastro seta o atributo dtCadastro
	 */
	public void setDtCadastro(Calendar dtCadastro)
	{
		Calendar valorAntigo = this.dtCadastro;
		this.dtCadastro = dtCadastro;
		this.firePropertyChange(PROPERTY_NASCIMENTO,valorAntigo,this.dtCadastro);
	}
	/**
	 * Metodo que retorna um atributo
	 * @return dtNascimento
	 */
	public Calendar getDtNascimento()
	{
		return dtNascimento;
	}
	/**
	 * Metodo que altera um atributo
	 * @param dtNascimento seta o atributo dtNascimento
	 */
	public void setDtNascimento(Calendar dtNascimento)
	{
		Calendar valorAntigo = this.dtNascimento;
		this.dtNascimento = dtNascimento;
		this.firePropertyChange(PROPERTY_NASCIMENTO,valorAntigo,this.dtNascimento);
	}
	/**
	 * Metodo que retorna um atributo
	 * @return id
	 */
	public Integer getId()
	{
		return id;
	}
	/**
	 * Metodo que altera um atributo
	 * @param id seta o atributo id
	 */
	public void setId(Integer id)
	{
		Integer valorAntigo = this.id; 
		this.id = id;
		this.firePropertyChange(PROPERTY_ID,valorAntigo,this.id);
	}
	/**
	 * Metodo que retorna um atributo
	 * @return nome
	 */
	public String getNome()
	{
		return nome;
	}
	/**
	 * Metodo que altera um atributo
	 * @param nome seta o atributo nome
	 */
	public void setNome(String nome)
	{		
		String valorAntigo = this.nome;
		this.nome = nome;
		this.firePropertyChange(PROPERTY_NOME,valorAntigo,this.nome);
	}
	/**
	 * Metodo que retorna um atributo
	 * @return rg
	 */
	public String getRg()
	{
		return rg;
	}
	/**
	 * Metodo que altera um atributo
	 * @param rg seta o atributo rg
	 */
	public void setRg(String rg)
	{
		String valorAntigo = this.rg;
		this.rg = rg;
		this.firePropertyChange(PROPERTY_RG,valorAntigo,this.rg);
	}
	
	public String toString()
	{
		return nome;
	}
}

Vcs notaram que minha classe Cliente herda de Model (da API do JGoodies), nao haveria um jeito fazer que meus beans nao façam herança da classe Model?
Quem puder me ajudar eu agradeço…

2 Respostas

Fernando_Romulo_da_S

Bem Pessoal eu consegui colocar outros Tipos no binding façam o seguinte:

para tipos Date:

na classe view coloquem assim:

JFormattedTextField tDtCadastro = BasicComponentFactory.createDateField(pm.getCadastroHolder());

e

JFormattedTextField tCodigo = BasicComponentFactory.createIntegerField(pm.getIdHolder(), 0);

Mas alguem sabe fazer binding com Imagens? Com objetos Calendar?

Fernando_Romulo_da_S

Galera há um meio de conectar qualquer tipo de componente ao atributo…
neste caso eu estou fazendo com um compnente JDateField da nachocalendar:

DateFormat df = DateFormat.getDateInstance(DateFormat.DEFAULT);
DateField tDtCadastro = new DateField();
tDtCadastro.setDateFormat(df);

//aqui eu faco o linkagem
Bindings.bind(tDtCadastro, "value","dtCadastro");

Observe que no ultimo comando, a string “value” é o atributo do componente (neste caso um DateField) que será associada ao atributo do meu bean (neste caso ele se chama “dtCadastro”), os dois atributos devem ser do mesmo tipo…
vls e até mais…

Criado 16 de fevereiro de 2007
Ultima resposta 20 de fev. de 2007
Respostas 2
Participantes 1