Lançado SwingBean 1.2!

Depois de um bom tempo sem uma nova versão, sai a versão 1.2 do SwingBean. A principal novidade é o mecanismo de binding que foi criado para que se possa obter objetos sincronizados com formulários e tabelas. Para isso basta obter o bean através do método getSynchoronizedObject() da classe JBeanPanel ou do método getSynchronizedList() da classe BeanTableModel. Dois novos tutoriais foram adicionados para mostrar o funcionamento dessas novas funcionalidades.

Outra coisa que foi alterada é que o SwingBean era feito para falhar silenciosamente, ou seja, se o nome de uma propriedade estava errado, ele simplesmente não dizia nada… Isso estava atrapalhando as pessoas a descobrir erros em seus programas. Devido a solicitações isso foi alterado e agora o SwingBean aponta as falhas através de exceções não-checadas. Por isso não estranhe se o seu programa que funcionava com a versão anterior lançar alguma exceção, pois pode ser algum erro que estava sendo omitido pelo framework.

A estrutura interna do SwingBean também foi melhorada e agora é possível adicionar novos componentes de interface para serem adicionados no formulário.

Agora o SwingBean também possui um fórum para que os desenvolvedores possam trocar idéias e experiências sobre o uso do framework! Agora aquelas respostas que eu dava individualmente para o pessoal por email, serão dadas pelo forum e servirão para outras pessoas que possuirem a mesma dúvida. O fórum está disponível no endereço http://www.ultimabrasil.com.br/forum/index.php?showforum=880 . Gostaria de agradecer ao Mauricio Nunes que foi quem teve a iniciativa de criar o fórum!!

Muito bom.

Apesar de existirem 1 milhão de frameworks web, SwingBean é padrão pra Desktop.

demorou mais chegou!

Sem dúvida esse recurso da sincronização entre o form e o bean vai ser muito útil.

Já faz algum tempo que venho usando-o, e não tenho do que reclamar. O único problema que eu tive foi ao tentar capturar um campo TextArea.
Porque parece quando é chamado panel.getComponent(“campo”), ele sempre retorna uma nova instancia de um JScrollPane, e sendo assim o frame não consegue repintá-lo novamente.

Parabéns Guerra.

Alguém saberia dizer se o JGoodies também possui este recurso?

Alguém saberia dizer se o JGoodies também possui este recurso?[/quote]

O JGoodies possui o JGoodies Binding que te auxilia a fazer esse tipo de coisa, porém você precisa colocar código nos seus beans para que ele faça isso. O SwingBean gera classes em tempo de execução usando o CGLib e você não precisa de mexer no seu bean para usar o binding. Vale a pena dar uma olhada!

uma pergunta: Acoplar os eventos (ApplicationAction) na view, é uma boa prática tratando-se de swing, mais precisamente, do swingbean ?

Parabéns Guerra, pelo update que no meu ponto de vista é digno do titulo de 2.0. Soh uma pergunta, a compatibilidade com a versao anterior eh full.

Diga Ednelson!!!

Ele possui compatibilidade full sim!!! A única questão é que migrando para a versão 1.2 podem ocorrer algumas exceções que o SwingBean acabava camuflando. Isso pode até ajudar a você descobrir algum bug que ainda não havia sido detectado.

Estou guardando o título de 2.0 para quando o SwingBean possuir anotações e internacionalização.

Fala Guerra, uma sugestão.

Vejo em muitos blogs que os emails mandados diretamente ao desenvolvedor são respondidos como um novo post no blog.
E pelo visto você vai fazer isso também, parabéns é uma excelente iniciativa.
Porém, eu vi que as duvidas anteriores já foram respondidas, minha sugestão é: Porque não fazer um tópico somente com as duvidas e as suas respostas anteriores? Tipo um FAQ.

[ ]'s

por isso a criação do forum caro amigo. la todos podem expor suas duvidas e as vezes nos mesmos tira-las ou entao o proprio desenvolvedor! isso e melhor que um faq ^^

Isso é o mesmo sistema usado em IDEs como Delphi, Visual Studio?

[quote=afsrj]Fala Guerra, uma sugestão.

Vejo em muitos blogs que os emails mandados diretamente ao desenvolvedor são respondidos como um novo post no blog.
E pelo visto você vai fazer isso também, parabéns é uma excelente iniciativa.
Porém, eu vi que as duvidas anteriores já foram respondidas, minha sugestão é: Porque não fazer um tópico somente com as duvidas e as suas respostas anteriores? Tipo um FAQ.

[ ]'s[/quote]

Realmente a presença de um FAQ ajudaria bastante. O problema é que existe uma falta de tempo da minha parte na criação de documentação para o SwingBean. Por isso, o fórum está ajudando bastante, pois as perguntas que respondia individualmente para cada um, agora estão ficando registradas para todos. Talvez não seja o tipo ideal, mas já é o começo…

Estamos precisando de colaboradores… Então se quiser ajudar o framework pegando as principais questões do forum e criando um FAQ para colocarmos no site, sua ajuda será muito bem vinda!!!

Não. O SwingBean tem uma idéia diferente e não auxilia apenas no desenho das telas, mas também na interação com os componentes.

Alguem ai poderia me explicar o por que que da erro quando eu gero um .JAR com SwingBean…

Eu configuro certinho, a classe principal… mas quando tenho abrir o ponto jar, da o erro que diz que ele nao pode achar a classe principal…

To quebrando a cabeça, mas nada o que eu faço funciona…

Guerra tenho um código em C# de uma aplicação minha que faz o seguinte.

  1. A primeira letra de cada palavra e convertida para maiusculo…e o restante minusculo…esse metodo eu encapsulei ele em um classe…especializada no componente TextBox do .NET. Que tal fazer isso no JAVA.

veja o codigo…

[code]//Se a primeira Letra for Maiuscula
void PMA()
{
//Inicia tratamento de erro
try
{
this.Cursor = Cursors.Arrow;
System.Threading.Thread.Sleep(20);
// Guarda em _words a lista de palavras do texto de TextBox1.
string[] _words = base.Text.Split(’ ‘);
//base.Text.Split(’ ');
// Cria um array para conter a lista das palavras com as primeiras maiúsculas.
string[] _newWords = new string[_words.GetLength(0)];
string _newString = “”;
// Para cada palavra do texto.
for (int _counter = 0; _counter <= _words.GetLength(0) - 1; _counter++)
{
// Pega a palavra atual.
string _word = _words[_counter];
// Se a palavra atual não for “”.
if (!_word.Equals(string.Empty))
{
// Converte a primeira letra da palavra para maiúsculo e o resto para minúsculo e guarda no array _newWords.
_newWords[_counter] = _word[0].ToString().ToUpper() + _word.Substring(1).ToLower();
}
else
{
_newWords[_counter] = _word;
}
}
// Para cada palavra presente em _newWords.
for (int _counter = 0; _counter <= _newWords.GetLength(0) - 1; _counter++)
{
// Se estiver na primeira palavra.
if (_counter.Equals(0))
{
// _newString = primeira palavra
_newString = _newWords[_counter];
}
// Senão for a primeira palavra
else
{
// _newString = conteúdo atual de _newString + palavra atual.
_newString = _newString + " " + _newWords[_counter];
}
}

            // Se o texto novo for diferente do que já estiver presente no TextBox. 
            if (!base.Text.Equals(_newString))
            {
                // Substitui o texto antigo pelo novo.      
                base.Text = _newString;
                // Posiciona o cursor no último caractere.           
                base.SelectionStart = base.Text.Length;

            }
        }
        catch (Exception)
        {

            throw new Exception("Erro interno");
        }
        finally
        {
            this.Cursor = Cursors.Default;
        }
    }[/code]