Não sei como seu Banco de Dados está mapeado, mas penso que está assim: o aluno pode pertencer a um módulo. Este módulo contém uma ou mais atividades. Certo?
Se for assim, do jeito que eu falei, ficaria algo assim:
- Eu tenho meu POJO Aluno, que contém um objeto Modulo que, por sua vez, possui uma coleção de Atividade.
public class Aluno {
private Long ID;
private String nome;
private Modulo modulo;
}
public class Modulo {
private Long ID;
private String nome;
private List<Disciplina> disciplinas;
}
public class Disciplina {
private Long ID;
private String nome;
private List<Atividade> atividades;
}
public class Atividade {
private Long ID;
private String nome;
}
Você tem o DAO de cada classe, mas eu vou fazer o do aluno pra exemplificar:
public class AlunoDAO {
public Aluno pesquisarPorID(Connection connection, Long ID)
throws SQLException {
ModuloDAO modulo = new ModuloDAO();
String query = "Select A.ID, A.Nome, A.Modulo From Alunos A Where A.ID = ?";
PreparedStatement statement = connection.prepareStatement(query);
ResultSet result = statement.executeQuery();
Aluno aluno = new Aluno();
if (result.next()) {
aluno.setID( result.getLong("ID") );
aluno.setNome( result.getString("Nome") );
aluno.setModulo( modulo.pesquisarPorID(result.getLong("Modulo")) );
}
statement.close();
return aluno;
}
}
Com isso, você tem seu aluno com seu respectivo módulo e suas disciplinas, juntamente com as atividades pertencentes a ela. Correto?
Assim, você cria seu TableModel para mapear isso tudo!
Esse seu modelo deve buscar o máximo de disciplinas que você possui e setar como número de colunas. Após isso, você busca os valores referentes a ela e preenche.
Que tal assim?