Pergunta

Eu estou tendo uma cãibra cérebro tentando entender a forma adequada de utilizar JGoodies ligações em meu aplicativo.

Eu tenho uma classe artigo que é um feijão que tem propriedades somente leitura. Article é um bean "simples", e não consegue ouvintes de propriedade, uma vez que as propriedades não mudar nunca. Eu tenho um balanço JPanel que gostaria de usar para exibir determinadas propriedades de um artigo. Diferentes objetos artigo podem ser vistos em momentos diferentes.

Eu estou procurando algo (X) que faz o seguinte através de um ou mais objetos:

  1. X contém o artigo atualmente visualizada. Eu posso chamar X.setArticle() e X.getArticle() a mudança para um artigo diferente. Não há outra maneira de mudar o artigo atualmente visualizada, eu tenho que passar por X para que ele saiba que eu estou mudando isso.
  2. Quando eu configurar meu JPanel, eu quero usar X para criar JTextFields somente leitura que são obrigados a várias propriedades do artigo atualmente visualizada (título, autores, etc.)
  3. (isso decorre # 1 e # 2) Sempre X.setArticle () é chamado, o conteúdo dos campos de texto será automaticamente atualização.

Eu tentei usar BeanAdapter para extrair os modelos de propriedade de um artigo contido em um ValueHolder e BasicComponentFactory.createTextField () para criar os campos de texto, e tudo parece funcionar , exceto que eu recebo um com.jgoodies.binding.beans.PropertyUnboundException reclamando que o meu artigo classe tem propriedades não ligados. Duh! Eu sei disso, eu simplesmente não consigo descobrir como obter o "encanamento" direito de lidar com ele. Cada Article é unmodifiable, mas o artigo atualmente visualizada pode apontar para um diferente.

alguma sugestão?

Foi útil?

Solução

Eu descobri-lo.

eu faço algo como isto:

 // on setup:

 BeanAdapter<Article> adapter = new BeanAdapter<Article>((Article)null,
    false);
 // the "false" in the constructor means don't try to observe property
 // changes within the Article, but we still can observe changes
 // if the Article itself is replaced with a new one.

 JTextField tfAuthors = BasicComponentFactory.createTextField(
     adapter.getValueModel("authors"));
 JTextField tfTitle = BasicComponentFactory.createTextField(
     adapter.getValueModel("title"));

Mais tarde, quando eu alterar o objeto do artigo, eu só fazer isso:

 public void showArticle(Article article)
 {
     adapter.setBean(article);
 }

e tudo atualizações na tela muito bem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top