Olá a todos!!! Seguinte, sou novo aqui no GUJ e estou com alguns problemas em criar um novo componente Swing.
Este componente é composto por um JList com JCheckBoxes, um JTextField e dois JButtons.
Sua finalidade é a seguinte:
O JTextField serve de pesquisa no conteúdo do JList e os dois JButtons servem para selecionar todos os itens ou não.
Ele até é funcional, mas estou com problemas. Preciso que este componente tenha a opção de ocultar o JTextField e os JButtons em tempo de execução, porém esta funcionalidade eu não estou conseguindo implementar.
Obviamente, críticas e sugestões são bem vindas.
Como o código é extenso, acho bom colocar o link aqui para download.
Olha, eu acho que você complicou um pouco para desenvolver seu componente… Vc quer q ele possa ser colocado em uma IDE ou é p/ uso em um projeto apenas? Acho que por querer que ele seja totalmente reutilizável vc acabou bagunçando as coisas.
Eu teria feito de forma mais simples, extendendo um JPanel e adicionando meus componentes nele. Vc precisa ter acesso BacicMListCheckBox para poder ocultar os botões certo?
Vc fez isso aqui em JMListCheckBox:
public void updateUI() {
super.updateUI();
if (UIManager.get(getUIClassID()) != null) {
setUI((MListCheckBoxUI) UIManager.getUI(this));
} else {
setUI(new BasicMListCheckBox());
}
}
Mas vc não precisa de uma referência a BasicMListCheckBox para ter acesso aos componentes? Vc teria que criar BasicMListCheckBox fora do método, usando ele como um membro privado e caso seja satisfeita a condição imposta em updateUI, usar a referência BasicMListCheckBox.
Com acesso a essa referência vc vai poder criar métodos em JMListCheckBox, que acessam os componentes (que também devems er privados) de BasicMListCheckBox e alterem seus valores.
Bom, não usei JPanel como classe base porque meu componente não está servindo para adicionar outros componentes(acho que essa é a idéia base de um JPanel) e sim ser um componente composto por outros componentes.
Esse componente realmente era pra ser customizável, e tem como princípio o uso em uma das minhas aplicações somente.
Procurando em tutoriais vi essa divisão UI delegate - JComponent - Model, e resolvi aplicar.
Acredito que o problema esteja na parte de renderizar(pois acho que preciso dar um repaint ou algo parecido),
mas mesmo dessa forma não adiantou muito.
Cara, se você tiver desenvolvendo para um cliente, não complique… Use um JPanel como o davidbuzatto falou, ainda mais porque seu componente final é composto de componentes prontos… Promova a reutilização ao invés de fazer tudo de novo.
Mas se tiver fazendo esse componente para estudar como se aplica MVC no Swing, aí é diferente.
Usar um JPanel não é empecilho para o que você está querendo fazer. Você faria algo como:
[code]public class SeuComponente extends JPanel {
// Adicione instâncias dos componentes que você precisa usando this.add();
// Use classes internas ou anônimas para tratar os eventos necessários
}
public class Teste extends JFrame {
// Use composição para usar o componente customizado em um JFrame
SeuComponente seuComponente;
}[/code]