Olá pessoal, estou tendo dificuldade no desenvolvimento de interfaces usando o Matisse (form designer) do Netbeans.
O Matisse é muito bom quando se está utilizando componentes padrão (swing,awt,etc) não extendidos ou extendidos mas que preservem um construtor da forma classe() que não cause problemas na instanciação pelo Matisse. O problema que tenho é que meu projeto extende vários componentes swing e nem todos preservam esse construtor padrão.
Um exemplo é a seguinte classe:
public class CampoBusca extends JTextField {
public CampoBusca(JTable t) {
//faz alguma coisa com a tabela passada
}
}
O matisse simplesmente não aceita dar drag’n drop com esse meu componente nem inserir ele no form. Essa classe não faz sentido ter um construtor padrão CampoBusca(), do ponto de vista do projeto. O workaround que eu faço para escapar dessa restrição do Matisse é usar um JTextField padrão do swing no desenho da interface que vai abrigar meu componente, porém essa interface não é a oficial, eu adiciono um sufixo “Design” no final do nome da classe que representa essa interface de trabalho. Daí depois eu copio todo código e colo na classe que vai ser a interface oficial, e modifico a declaração, instanciação e outras coisas que o código gerado pelo Matisse não deixava mudar (eu sei, horrível).
Outro exemplo de dificuldade é quando tenho uma classe que faz o seguinte:
public class TabelaX extends JTable {
public TabelaX() {
//seta o modelo da tabela com os 10 primeiros registros da tabela x de banco de dados
}
}
Quando tento usar no design da interface esse meu componente, o Matisse dá um erro dizendo que não foi possível instanciar o objeto e que ele não é um javabean. Nesse caso novamente eu uso a gambiarra descrita acima
Só que esse tipo de gambiarra é horrível e ineficiente do ponto de vista de produtividade. Existe alguma forma de configurar o Matisse ou alguma outra mágica pra fazer ele aceitar trabalhar com esses tipos de componentes customizados?