Olá pessoal,
bem, estou construindo uma aplicação relativamente simples para desktop, sem nada de Web ou BD.
Minha duvida é sobre a estrutura que fiz a interface grafica onde tenho JPanel com uma JToolBar uma JTree e um JScrollPane.
Dentro do JScroolPane tenho algumas JTables.
O caso é que a JToolBar tem botoes para adicionar componentes nas celulas da JTable que estiver com o foco, fiz algo assim:
[botao da JToolBar pressionado] >> [JToolBar chama o metodo addComponent() do JPanel] >> [JPanel chama o metodo addComponent() do ScroolPane] >> [ScroolPane chama o metodo addComponent da JTable atual, a que estiver focada, se nenhuma estiver nao faz nada]
A idéia com todas essas delegações é diminuir acoplamento e facilitar os teste unitarios (e realmente facilitou), mas gostaria de opinioes dos mais experientes, nao sei se essa arquitetura pode causar problemas no futuro (o sistema ainda vai crescer muito).
PS. Todas as classes sao implementacoes de interface. DefaultIDETable é implementacao da interface IDETable, isso facilita para fazer os testes com JUnit, pois posso criar outras implementacoes da tabela. Nao sei se vem ao caso.
— update
Deixa eu mostrar um pouco de codigo pra facilitar…
// Dentro de cada pacote tem varias classes e interfaces, vou colocar apenas as relativas a pergunta para nao poluir
---
package app.project;
public interface Project {
public void addComponent(); // chamado pela toolBar, ou pelo atalho de teclado
// outros metodos
}
class DefaultProject extends JPanel implements Project {
private final MyTooBar toolBar = new MyToolBar(this);
private TablePane tablePane;
public void addComponent() {
tablePane.addComponent();
}
// varios outros metodos e atributos
}
// outras classes e interfaces deste pacote
---
package app.project.tablesPane
public interface TablePane {
addComponent();
// outros metodos
}
class DefaultTablePane extends JScrollPane implements TablePane {
private Project parentProject;
private Vector<MyTable> myTables;
// inside button's actionPerformed...
parentProject.addComponent();
// outros metodos e atributos
}
// outras classes e interfaces deste pacote
---
package app.project.tablesPane.table;
public interface MyTable {
addComponent();
// outros metodos
}
class DefaultMyTable extends JTable implements MyTable {
// adiciona o componente
}
// outras classes e interfaces deste pacote
---