Ajuda para inserir itens do arraylist na tela[Resolvido]

49 respostas
P

oi!
ah tenho um arraylist com este conteudo

artes 1 biologia 1 biologia 2 biologia 3 biologia 4 biologia 5 biologia 6 ... sociologia 1 sociologia 2 sociologia 3
alguem pode me ajudar a colocar estes itens neste formato

artes	        biologia

1 1
2
3


e assim por diante
eu ate achei um forum do guj que fala sobre isso mas ainda nao consegui resolver tipo eu não quero adicionar na tela disciplinas repetidas e sim todos os modulos das mesmas,tem como excluir os repetidos sem excluir os modulos?
obg

49 Respostas

E

kra da uma explicada melhor… num entendi o objetivo do q vc falow… até o exemplo fiko esquisito…

P

oi bah ficou ruim meu exemplo mesmo
é que eu qria colocar na tela tipo o nome das disciplinas e embaixo de cada uma seus respectivos modulos so que como as disciplinas e modulos no banco estão armazenadas daquela maneira que eu postei anteriormente eu queria saber se tipo tem uma maneira com que eu possa adicionar aqueles itens na tela sem repetir o nome das disciplinas dai eu ate encontrei algo que da para resolver isso aquihttp://www.guj.com.br/java/116888-problema-com-valores-repetidos-em-um-arraylist
isso resolve so que o problema é q se eu utilizar estes metodos não vão se repetir as disciplinas e os modulos :slight_smile:
espero ter descrito melhor agora
obg

P
tipo eu ja tentei fazer isto de varias formas usando metodo que eles explicaram no outro forum do guj ficou assim
Collection  disciplina_modulo=new ArrayList();
resultado = comando.executeQuery("select Id_disciplina,modulo from disc_modulo  where ensino='"+1+"'order by Id_disciplina");
			while (resultado.next())
			{ 
				disciplina_modulo.add(resultado.getObject(1).toString());
				disciplina_modulo.add(resultado.getObject(2).toString());
			}

			disciplina_modulo = Collections.singleton(new HashSet(disciplina_modulo));  

			for (Object object : disciplina_modulo) {  
				System.out.println(object.toString());  

				System.out.println(disciplina_modulo.toString());
funciona perfeitamente mas não posso usar porcausa dos modulos ah ja tentei fazer isto com vetores normais e uma matriz dai ficou mais ou menos assim
String disciplinas[];
	String modulos[];
	Object itensTela[][] ;
	Container tela;
	

	JButton b,b1,b2;
	public modulos()
	{

		super ("Ensino Medio");   
		tela = getContentPane ();
		tela.setLayout(null); 

		try {
			conexao = conecta.conectabanco();
			comando = conexao.createStatement();
		}
		catch(Exception x) {
			JOptionPane.showMessageDialog(null, "Erro na conexÄo do banco");
		}

		try{
			int tamanhoVetor=0;
			resultado = comando.executeQuery("select distinct Id_disciplina from disc_modulo where ensino='"+1+"' order by Id_disciplina");
			while (resultado.next())
			{ 
				tamanhoVetor++;
				disciplinas=new String[tamanhoVetor];System.out.println("tam de v: "+disciplinas.length);
			}

			int size=0;
			resultado = comando.executeQuery("select distinct Id_disciplina from disc_modulo where ensino='"+1+"' order by Id_disciplina");
			while (resultado.next())
			{ 
				disciplinas[size]=resultado.getObject(1).toString();
				size++;
			}

			int tamanho=0;
			for(int i=0;i<disciplinas.length;i++)
			{
				resultado = comando.executeQuery("select modulo from disc_modulo where ensino='"+1+"'and Id_disciplina='"+disciplinas[i]+"' order by modulo");
				while (resultado.next())
				{ 
					tamanho++;
					modulos=new String[tamanho];System.out.println("tam de modulos:"+ modulos.length);
				}
			}
				
			    int quantidade=0;String maior=null;
				resultado = comando.executeQuery("select max(modulo) from disc_modulo ");
				while (resultado.next())
				{ 
					maior=resultado.getObject(1).toString();
				}
				if(maior!=null)
				{
					quantidade=Integer.parseInt(maior);
				}

				itensTela=new Object[disciplinas.length][quantidade+1]; 

				for(int i=0;i<itensTela.length;i++)
				{
					if(disciplinas[i]!=null)
					{
						itensTela[i][0]=new JCheckBox(disciplinas[i]);
						if(itensTela[i][0]!=null)
						{((Component) itensTela[i][0]).setBounds(x, y1, 150, 25);
						tela.add((Component) itensTela[i][0]);
						x+=150;
						if(i==4 || i==9 || i==14 || i==19 )
						{
							x=20;
							y1+=180;	
							tela.repaint(); 
						}
						}


					}


				}
			
			}

			catch(Exception e)
			{
				e.printStackTrace();
			}
eu tb consigo inserir na tela deste jeito e fica bem certinho as disciplinas mas o problema é na hora de colocar os modulos na tela tipo tu sabe como eu faço para ir trocando so as colunas e não as linhas da matriz ja que as disciplinas ficam todas na coluna 0 eu apenas deveria inserir em cada linha os modulos correspondentes aquela disciplina trocando de modulos dai ficaria assim na minha matriz m[0][0] coluna 0 coluna 1 coluna2 coluna3 linha 0 biologia modulo1 modulo2 modulo3 pode me ajudar? mto obg:)
C

n sei como funciona banco de dados mas axo q isso ajuda

instancie
//String nome, List de modulos se int use Integer, se String use String
        HashMap<String, ArrayList<Integer>> mapaDisciplina = new HashMap<String, ArrayList<Integer>>();
        //chaves do mapa
        ArrayList<String> listaDisciplinas = new ArrayList<String>();
para adicionar
String disciplina = "NomeDaDisciplina";//exemplo
        ArrayList<Integer> listaModulos = mapaDisciplina.get(disciplina);

        //verifica se ja existe disciplina, se n devemos criar
        if (listaModulos == null) {
            //cria a lista de modulos
            listaModulos = new ArrayList<Integer>();
            //adiciona a chave
            listaDisciplinas.add(disciplina);
            //adiciona a lista no mapa
            mapaDisciplina.put(disciplina, listaModulos);
        }
        int numeroDoModulo = 0;//exemplo
        listaModulos.add(numeroDoModulo);
para transformar em array
//para exibir
        //Converter para array
        String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);

        //para pegar a lista de modulos da disciplina arrayDeDisciplinas[0]

        ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[0]);
        //Converter para array
        Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);
os imports se precisar
import java.util.ArrayList;
import java.util.HashMap;
P
ola ChronosSage! bah obrigada pela ajuda desta maneira ficou mais facil para obter as disciplinas e modulos mas nessa linha
String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);
tipo eu usei um system para imprimir talvez eu tenha feita de forma errada mas inves de sair o conteudo aparece o endereco de memoria do objeto tipo eu fiz isso
System.out.println(listaDeModulos+"¨¨"+"\n"+arrayDeDisciplinas.toString()+" **");
depois do seu codigo
//Converter para array  
									String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);  
									  
									//para pegar a lista de modulos da disciplina arrayDeDisciplinas[0]  
									  
									ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[0]);  
									//Converter para array  
									Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);
dai no console ficou assim
[1, 2, 3, 4, 5, 6]¨¨
[Ljava.lang.String;@feb48 **
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]¨¨
[Ljava.lang.String;@11ff436 **
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]¨¨
[Ljava.lang.String;@da3a1e **
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]¨¨
[Ljava.lang.String;@11dba45 **
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]¨¨
[Ljava.lang.String;@b03be0 **
...
ah e antes de tudo isso apos a criacao dos arrayslist conforme tu disseste fiz o seguinte
resultado = comando.executeQuery("select Id_disciplina,modulo from disc_modulo where ensino='"+1+"'");
									while (resultado.next())
									{ 
										String disciplina = resultado.getString(1);//exemplo  
										ArrayList<Integer> listaModulos = mapaDisciplina.get(disciplina);  
										  
										//verifica se ja existe disciplina, se n devemos criar  
										if (listaModulos == null) {  
										    //cria a lista de modulos  
										    listaModulos = new ArrayList<Integer>();  
										    //adiciona a chave  
										    listaDisciplinas.add(disciplina);  
										    //adiciona a lista no mapa  
										    mapaDisciplina.put(disciplina, listaModulos);  
										}  
										int numeroDoModulo = resultado.getInt(2);//exemplo  
										listaModulos.add(numeroDoModulo);  
										
									}
obrigada pela ajuda e ah minha duvida é por as disciplinas estao saindo assim no console apos a conversao :)
P

so uma coisa eu nao to conseguindo adicionar os itens do meu array depois da conversao na tela ja tentei usar um cating tela.add((Component)arrayDeDisciplinas); ja tentei desta maneira for(int i=0;i<arrayDeDisciplinas.length;i++){tela.add(arrayDeDisciplinas[i]);}e tb nao deu :frowning:

muito obrigada pela ajuda e explicações estou editando umas coisas e qualquer coisa eu posto de novo!
:slight_smile:

C

Trocar por(Serve pra qualquer tipo de array[], n serve para matriz)

P
hmm agora eu to conseguindo imprimir os objetos contidos no vetor mas to com outro problema :( nao to conseguindo add na tela sabe ja tentei um pouco de tudo mas nao consigo add na tela:( eu tentei
int num=0,posicao=0;
									
										if(num<quantidade+1)
										{
											itensTela[posicao][num]=new JCheckBox(arrayDeDisciplinas[posicao]);
										((Component) itensTela[posicao][num]).setBounds(x,y1,120,25);
										if( itensTela[posicao][num] != null)
										tela.add((Component) itensTela[posicao][num]);
										itensTela[posicao][num]=new JCheckBox(""+arrayDeModulos[posicao]);
										((Component) itensTela[posicao][num]).setBounds(x,y1,120,25);
										if( itensTela[posicao][num] != null)
										tela.add((Component) itensTela[posicao][num]);
										num++;
										if( itensTela[posicao][num] != null)
										System.out.println(((AbstractButton) itensTela[posicao][num]).getText()+" pos "+posicao+" num "+num);
										}
										else
										{
											posicao++;
											num=0;
											if( itensTela[posicao][num] != null)
											tela.add((Component) itensTela[posicao][num]);
										}

										x+=150;
										if(i==4 || i==9 || i==14 || i==19 )
										{
											x=20;
											y1+=180;	
											tela.repaint(); 
										}
e tambem
int num=0,posicao=0,x1=20,y2=60;
									
									if(num<quantidade+1)
									{
										itensTela[posicao][num]=new JCheckBox(""+arrayDeModulos[posicao]);
									((Component) itensTela[posicao][num]).setBounds(x1,y2,120,25);
									if(((AbstractButton) itensTela[posicao][num]).getText() != null)
									{tela.add((Component) itensTela[posicao][num]);
									num++;	
									}
									else
									{
										System.out.println("no else depois de add na tela...num "+num+" pos "+posicao+" itenstela "+((AbstractButton) itensTela[posicao][num]).getText());
									}
//									System.out.println("no if se num é menor qnte "+((AbstractButton) itensTela[posicao][num]).getText());
									}
									if(num==quantidade+1)
									{
										posicao++;
										num=posicao;System.out.println("se num for igual ao qntde...posicao "+posicao+" num "+num+" qnte "+quantidade);
									}
									
									x1+=150;
									if(posicao==4 || posicao==9 || posicao==14 || posicao==19 )
									{
										x1=20;
										y2+=180;	
										tela.repaint(); System.out.println("alterando as posicoes");
									}
ah fiz estes codigos apos as conversões mas nao consigo exibir nada disso na tela :( pode me ajudar a encontrar o erro no codigo? :cry: bg
C
paty_trind:
so uma coisa eu nao to conseguindo adicionar os itens do meu array depois da conversao na tela ja tentei usar um cating
tela.add((Component)arrayDeDisciplinas);
ja tentei desta maneira
for(int i=0;i<arrayDeDisciplinas.length;i++){tela.add(arrayDeDisciplinas[i]);}
e tb nao deu :(

muito obrigada pela ajuda e explicações estou editando umas coisas e qualquer coisa eu posto de novo!
:)

vc n pode adicionar array diretamente na tela, array n é component

tente isso

public static void main(String[] args) {
        //instancia de teste, n deve ter isso na sua aplicaçao, usei para teste
        String arrayDeDisciplinas[] = {"Disciplina0", "Disciplina1"};
        HashMap<String, ArrayList<String>> mapaDisciplina = new HashMap<String, ArrayList<String>>();
        mapaDisciplina.put(arrayDeDisciplinas[0], new ArrayList<String>());
        mapaDisciplina.put(arrayDeDisciplinas[1], new ArrayList<String>());
        mapaDisciplina.get("Disciplina0").add("Modulo00");
        mapaDisciplina.get("Disciplina1").add("Modulo10");
        mapaDisciplina.get("Disciplina0").add("Modulo01");
        mapaDisciplina.get("Disciplina0").add("Modulo02");
        mapaDisciplina.get("Disciplina1").add("Modulo11");
        
        //tela, se inserir exatamente assim pode ser q funcione
        JPanel tela = new JPanel();
        tela.setLayout(null);
        int colunas = arrayDeDisciplinas.length;
        JCheckBox[][] matrizModulo = new JCheckBox[colunas][0];
        int x = 0,y = 0;
        int maxX = 0, maxY = 0;
        for (int c = 0; c < colunas; c++) {
            x = x + 10;
            y = (c / 5)*180;
            JLabel disciplina = new JLabel(arrayDeDisciplinas[c]);
            disciplina.setBounds(x, y, 150, 25);
            tela.add(disciplina);
            y = y + 25;
            
            ArrayList<String> modulos = mapaDisciplina.get(arrayDeDisciplinas[c]);
            int linhas = modulos.size();
            matrizModulo[c] = new JCheckBox[linhas];
            for (int l = 0; l < linhas; l++) {
                matrizModulo[c][l] = new JCheckBox(modulos.get(l));
                matrizModulo[c][l].setBounds(x, y, 150, 25);
                tela.add(matrizModulo[c][l]);
                y = y + 25;

                maxY = Math.max(maxY, y);
            }
            x = x + 150;

            maxX = Math.max(maxX, x);
        }
        tela.setPreferredSize(new Dimension(maxX, maxY));

        
        //teste execuçao
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(tela);
        frame.pack();
        frame.setVisible(true);
    }
P

ah so um minuto to tentando molda para meu codigo a sua estrutura tah tipo agora entendi pq nao da para adicionar os itens direto na tela int colunas = arrayDeDisciplinas.length; JCheckBox[][] matrizModulo = new JCheckBox[colunas][0]; for (int c = 0; c < colunas; c++) { ArrayList<Integer> mode = mapaDisciplina.get(arrayDeDisciplinas[c]); int linhas = mode.size(); matrizModulo[c] = new JCheckBox[linhas]; for (int l = 0; l < linhas; l++) { matrizModulo[c][l] = new JCheckBox(""+mode.get(l)); matrizModulo[c][l].setBounds(x, y, 150, 25); tela.add(matrizModulo[c][l]); y = y + 25; }
e tipo meu programa trava:(
o q estou faznd errado?
obg pela ajuda:)

C

paty_trind:
ah so um minuto to tentando molda para meu codigo a sua estrutura tah tipo agora entendi pq nao da para adicionar os itens direto na tela int colunas = arrayDeDisciplinas.length; JCheckBox[][] matrizModulo = new JCheckBox[colunas][0]; for (int c = 0; c < colunas; c++) { ArrayList<Integer> mode = mapaDisciplina.get(arrayDeDisciplinas[c]); int linhas = mode.size(); matrizModulo[c] = new JCheckBox[linhas]; for (int l = 0; l < linhas; l++) { matrizModulo[c][l] = new JCheckBox(""+mode.get(l)); matrizModulo[c][l].setBounds(x, y, 150, 25); tela.add(matrizModulo[c][l]); y = y + 25; }
e tipo meu programa trava:(
o q estou faznd errado?
obg pela ajuda:)

verifique os loops ou
post o codigo completo da classe e se apresentar algum erro tabem para q eu possa identificar o problema

P
Ah o codigo ficou mais ou menos assim
for(int i=0;i<itensTela.length;i++)
					for(int j=0;j<itensTela[i].length;j++)
					{
					//	if(((JCheckBox) itensTela[i][0]).isSelected())
						//{
							try{ int x = 0,y = 0;
								resultado = comando.executeQuery("select max(modulo) from disc_modulo ");
								while (resultado.next())
								{ 
									maior=resultado.getObject(1).toString();
								}
								if(maior!=null)
								{
									quantidade=Integer.parseInt(maior);
								}

								resultado = comando.executeQuery("select Id_disciplina,modulo from disc_modulo where ensino='"+1+"'");
								while (resultado.next())
								{ 
									String disciplina = resultado.getString(1);//exemplo  
									ArrayList<Integer> listaModulos = mapaDisciplina.get(disciplina);  
									  
									//verifica se ja existe disciplina, se n devemos criar  
									if (listaModulos == null) {  
									    //cria a lista de modulos  
									    listaModulos = new ArrayList<Integer>();  
									    //adiciona a chave  
									    listaDisciplinas.add(disciplina);  
									    //adiciona a lista no mapa  
									    mapaDisciplina.put(disciplina, listaModulos);  
									}  
									int numeroDoModulo = resultado.getInt(2);//exemplo  
									listaModulos.add(numeroDoModulo);  
									
								}
								//para exibir  
								//Converter para array  
								String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);  
								  
								//para pegar a lista de modulos da disciplina arrayDeDisciplinas[0]  
								  
								ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[0]);  
								//Converter para array  
								Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);  
								
								int colunas = arrayDeDisciplinas.length;  
							    
								JPanel telap = new JPanel();  
							    telap.setLayout(null);  
							    int colunas1 = arrayDeDisciplinas.length;  
							    JCheckBox[][] matrizModulo = new JCheckBox[colunas1][0];  
							    int x1 = 0,y1 = 0;  
							    int maxX = 0, maxY = 0;  
							    for (int c = 0; c < colunas1; c++) {  
							        x1 = x1 + 10;  
							        y1 = (c / 5)*180;  
							        JLabel disciplina = new JLabel(arrayDeDisciplinas[c]);  
							        disciplina.setBounds(x1, y1, 150, 25);  
							        tela.add(disciplina);  
							        y1 = y1 + 25;  
							          
							        ArrayList<Integer> modulos = mapaDisciplina.get(arrayDeDisciplinas[c]);  
							        int linhas = modulos.size();  
							        matrizModulo[c] = new JCheckBox[linhas];  
							        for (int l = 0; l < linhas; l++) {  
							            matrizModulo[c][l] = new JCheckBox(modulos.get(l)+"");  
							            matrizModulo[c][l].setBounds(x1, y1, 150, 25);  
							            tela.add(matrizModulo[c][l]);  
							            y1 = y1 + 25;  
							  
							            maxY = Math.max(maxY, y1);  
							        }  
							        x1 = x1 + 150;  
							  
							        maxX = Math.max(maxX, x1);  
							    }  
							    telap.setPreferredSize(new Dimension(maxX, maxY));  
							    tela.add(telap);
							    tela.repaint();
							}
o erro que ocorre é o seguinte
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Unknown Source)
	at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
	at java.lang.AbstractStringBuilder.append(Unknown Source)
	at java.lang.StringBuilder.append(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonUI.installDefaults(Unknown Source)
	at javax.swing.plaf.basic.BasicRadioButtonUI.installDefaults(Unknown Source)
	at javax.swing.plaf.metal.MetalRadioButtonUI.installDefaults(Unknown Source)
	at javax.swing.plaf.metal.MetalCheckBoxUI.installDefaults(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonUI.installUI(Unknown Source)
	at javax.swing.JComponent.setUI(Unknown Source)
	at javax.swing.AbstractButton.setUI(Unknown Source)
	at javax.swing.JCheckBox.updateUI(Unknown Source)
	at javax.swing.AbstractButton.init(Unknown Source)
	at javax.swing.JToggleButton.<init>(Unknown Source)
	at javax.swing.JCheckBox.<init>(Unknown Source)
	at javax.swing.JCheckBox.<init>(Unknown Source)
	at TelaDeEscolhaModulos.<init>(TelaDeEscolhaModulos.java:184)
	at Menu$4.actionPerformed(Menu.java:306)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
....
o erro ocorre nesta linha
matrizModulo[c][l] = new JCheckBox(modulos.get(l)+"");
P
oooi ChronosSage!!! olha so consegui arrumar em partes a tela tipo eu consigo editar as disciplinas direitinho na tela mas quando eu tento inserir os modulos da nullpointerexception nesta linha
int linhas = modulos.size();  //null
e neste momento meu codigo ta assim
int colunas1 = arrayDeDisciplinas.length;  
							    JCheckBox[][] matrizModulo = new JCheckBox[colunas1][0];  
							    int x1 = 0,y1 = 0;  
							    int maxX = 0, maxY = 0;  
							    for (int c = 0; c < colunas1; c++) {  
							      
							        JCheckBox disciplina = new  JCheckBox(arrayDeDisciplinas[c]);  
							        disciplina.setBounds(y1, x1, 150, 25);  
							        tela.add(disciplina);    tela.repaint();
							        y1 = y1 + 150;  
							       if(c==4 || c==9 || c==14 || c==19)
							       {
							    	    x1 = x1 + 250;
							    	    y1=0;
							       }
							          
							        ArrayList<Integer> modulos = mapaDisciplina.get(arrayDeModulos[c]);  
							        int linhas = modulos.size();  //null
							        matrizModulo[c] = new JCheckBox[linhas];  
							        for (int l = 0; l < linhas; l++) {  
							            matrizModulo[c][l] = new JCheckBox(modulos.get(l)+"");   
							            matrizModulo[c][l].setBounds(x1, y1, 150, 25);  
							            tela.add(matrizModulo[c][l]);    tela.repaint();
							            y1 = y1 + 25;  
							  
							            maxY = Math.max(maxY, y1);  
							        }  
							        x1 = x1 + 150;  
							  
							        maxX = Math.max(maxX, x1);  
							    }
muito obrigada pela ajuda :)
C
paty_trind:
oooi ChronosSage!!! olha so consegui arrumar em partes a tela tipo eu consigo editar as disciplinas direitinho na tela mas quando eu tento inserir os modulos da nullpointerexception nesta linha
int linhas = modulos.size();  //null
e neste momento meu codigo ta assim
int colunas1 = arrayDeDisciplinas.length;  
							    JCheckBox[][] matrizModulo = new JCheckBox[colunas1][0];  
							    int x1 = 0,y1 = 0;  
							    int maxX = 0, maxY = 0;  
							    for (int c = 0; c < colunas1; c++) {  
							      
							        JCheckBox disciplina = new  JCheckBox(arrayDeDisciplinas[c]);  
							        disciplina.setBounds(y1, x1, 150, 25);  
							        tela.add(disciplina);    tela.repaint();
							        y1 = y1 + 150;  
							       if(c==4 || c==9 || c==14 || c==19)
							       {
							    	    x1 = x1 + 250;
							    	    y1=0;
							       }
							          
							        ArrayList<Integer> modulos = mapaDisciplina.get(arrayDeModulos[c]);  
							        int linhas = modulos.size();  //null
							        matrizModulo[c] = new JCheckBox[linhas];  
							        for (int l = 0; l < linhas; l++) {  
							            matrizModulo[c][l] = new JCheckBox(modulos.get(l)+"");   
							            matrizModulo[c][l].setBounds(x1, y1, 150, 25);  
							            tela.add(matrizModulo[c][l]);    tela.repaint();
							            y1 = y1 + 25;  
							  
							            maxY = Math.max(maxY, y1);  
							        }  
							        x1 = x1 + 150;  
							  
							        maxX = Math.max(maxX, x1);  
							    }
muito obrigada pela ajuda :)
na linha 17
ArrayList<Integer> modulos = mapaDisciplina.get(arrayDeModulos[c]);
trocar por
ArrayList<Integer> modulos = mapaDisciplina.get(arrayDeDisciplinas[c]);
P

oi
olha so fiz troca mas agora ta dando este erro

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOfRange(Unknown Source) at java.lang.String.<init>(Unknown Source) ...
que a ponta para a linha matrizModulo[c][l] = new JCheckBox(listaDeModulos.get(l)+"");
bah eu tava pesquisando sobre este erro mas não sei como resolver eu li este topico http://www.guj.com.br/java/43775-javalangoutofmemoryerror-java-heap-space que diz mais ou menos como resolver o problema mas tipo isso é o problema no programa ou na classe especifica?
muito obrigada :smiley:

P
olha so modifiquei a parte dos modulos e meu codigo ficou assim:
int colunas11 = arrayDeDisciplinas.length;  
							    int x11 = 0,y11 = 60;    
							    for (int c = 0; c < colunas11; c++) {  
							      
							        JCheckBox modulo = new  JCheckBox("*"+arrayDeModulos[c]);  
							        modulo.setBounds(y11, x11, 150, 25);  
							        tela.add(modulo);    tela.repaint();
							        y11 = y11 + 150;  System.out.println("bah "+modulo.getText());
							       if(c==4 || c==9 || c==14 || c==19)
							       {
							    	    x11 = x11 + 250;
							    	    y11=0;
							       }
							          
							      
							    }
a unica coisa que falta é adicionar os itens na tela pq no print
System.out.println("bah "+modulo.getText());
aparecem todos os modulos no console mas cmo add na tela pq nao ta dando? obrigada pela ajuda :)
C
paty_trind:
olha so modifiquei a parte dos modulos e meu codigo ficou assim:
int colunas11 = arrayDeDisciplinas.length;  
							    int x11 = 0,y11 = 60;    
							    for (int c = 0; c < colunas11; c++) {  
							      
							        JCheckBox modulo = new  JCheckBox("*"+arrayDeModulos[c]);  
							        modulo.setBounds(y11, x11, 150, 25);  
							        tela.add(modulo);    tela.repaint();
							        y11 = y11 + 150;  System.out.println("bah "+modulo.getText());
							       if(c==4 || c==9 || c==14 || c==19)
							       {
							    	    x11 = x11 + 250;
							    	    y11=0;
							       }
							          
							      
							    }
a unica coisa que falta é adicionar os itens na tela pq no print
System.out.println("bah "+modulo.getText());
aparecem todos os modulos no console mas cmo add na tela pq nao ta dando? obrigada pela ajuda :)
pode ser varias coisas: -se 'tela' é do 'JFrame' entao onde ta tela, mude para 'tela.getContentPane()' se a mudança n adiantou verifique se setou o layout null, 'tela.getContentPane().setLayout(null)'

-se 'tela' é do tipo 'JPanel' ou 'Container' entao
verifique se setou o layout null, 'tela.setLayout(null)'

-remova 'tela.repaint', n precisa ou use somente uma vez, quando todos os componentes ja estiverem sido inseridos

se n resolveu, poste o codigo da tela novamente

P
ooi ChronosSage, olha so fiz estas mudanças e os modulos ainda não aparecem na tela so as disciplinas . Dai ocorre o erro
java.lang.ArrayIndexOutOfBoundsException: 6
	at TelaDeEscolhaModulos.<init>(TelaDeEscolhaModulos.java:182)
	at Cadastro$5.actionPerformed(Cadastro.java:540)
	at javax.swing.JComboBox.fireActionEvent(Unknown Source)
....
que aponta para esta linha
JCheckBox modulo = new  JCheckBox("*"+arrayDeModulos[c]);
meu codigo ta assim
String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);  
								  
								//para pegar a lista de modulos da disciplina arrayDeDisciplinas[0]  
								  
								ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[0]);  
								//Converter para array  
								Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);  
								  
							    int colunas1 = arrayDeDisciplinas.length;  
							    int x1 = 0,y1 = 0;    
							    for (int c = 0; c < colunas1; c++) {  
							      
							        JCheckBox disciplina = new  JCheckBox(arrayDeDisciplinas[c]);  
							        disciplina.setBounds(y1, x1, 150, 25);  
							        getContentPane().add(disciplina);    // getContentPane().repaint();
							        y1 = y1 + 150;  
							       if(c==4 || c==9 || c==14 || c==19)
							       {
							    	    x1 = x1 + 250;
							    	    y1=0;
							       }
							          
							      
							    } 
							    int colunas11 = arrayDeDisciplinas.length;  
							    int x11 = 0,y11 = 60;    
							    for (int c = 0; c < colunas11; c++) {  
							      
							        JCheckBox modulo = new  JCheckBox("*"+arrayDeModulos[c]);  
							        modulo.setBounds(y11, x11, 150, 25);  
							       getContentPane().add(modulo);     //getContentPane().repaint();
							        y11 = y11 + 150;  System.out.println("bah "+modulo.getText());
							       if(c==4 || c==9 || c==14 || c==19)
							       {
							    	    x11 = x11 + 250;
							    	    y11=0;
							       }
							          
							      
							    } 
							   
							    getContentPane().repaint();
muit :lol: :lol: brigada pela ajuda
C

na linha 25 onde ta

é array de modulos

P

obrigada ChronosSage!!!
agora os modulos estão aparecendo so falta eu organiza-los na tela para ficarem embaixo das disciplinas corretas ,
ah para fazer isso tem como eu relacionar estes modulos com as respectivas disciplinas que ja estam la?
muitooooooo obrigada!!!

C
nessa linha esta pegando a lista de modulos da disciplina com o indice '0'
ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[0]);

crie um loop para pegar os modulos de todas as disciplinas

algo assim

String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);

        //para pegar a lista de modulos da disciplina arrayDeDisciplinas[m]
        int colunas = arrayDeDisciplinas.length;
        for (int c = 0; c < colunas; c++) { //criar uma coluna por ves

            JCheckBox disciplina = new JCheckBox(arrayDeDisciplinas[c]);
            disciplina.setBounds(?);
            getContentPane().add(disciplina);    // getContentPane().repaint(); //a 1a linha é a disciplina

            ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[c]);
            //Converter para array
            Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);
            int linhas = arrayDeModulos.length;
            //adiciona as outras linhas q saao os modulos da disciplina
            for (int l = 0; l < linhas; l++) {
                JCheckBox modulo = new JCheckBox("*" + arrayDeModulos[l]);
                modulo.setBounds(?);
                getContentPane().add(modulo);     //getContentPane().repaint();
                System.out.println("bah " + modulo.getText());
            }


        }

        getContentPane().repaint();
P

ok ChronosSage!!!
vou editar e mais tarde posto!!!
muito obrigada por toda ajuda que tu tens me dado :slight_smile:

P

fiz deste jeito so que deu este erro

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space at javax.swing.JToggleButton.<init>(Unknown Source) at javax.swing.JCheckBox.<init>(Unknown Source) at javax.swing.JCheckBox.<init>(Unknown Source) at TelaDeEscolhaModulos.<init>(TelaDeEscolhaModulos.java:178) at Menu$4.actionPerformed(Menu.java:306) ...
que aponta para este JCheckBox modulo = new JCheckBox("*" + arrayDeModulos[l]);
:frowning:
mas olha so vou tentando arrumar aqui e qualquer coisa eu posto!
:slight_smile:

C

onde esta “String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);” adicione apos isso

int colunas = arrayDeDisciplinas.length; for (int c = 0; c < colunas; c++) { System.out.print("Disciplina("+arrayDeDisciplinas[c]+"):<"); ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[c]); Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]); System.out.print(Arrays.toString(arrayDeModulos)+">\n"); }
O codigo acima ira imprimir no console de maneira organizada, poste aki o resultado

verifiquei o ultimo codigo q vc postou e percebi q vc inverteu x e y

sobre o erro do checkbox, n encontrei problema

P

oi
ah fiz o que tu disseste e no console ficou assim

Disciplina(historia):<[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]> Disciplina(filosofia):<[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]> ....
nao ta mais dando aquele erro mas tu tinhas razão tinha haver com outros itens do programa mas ja ta solucionado:)
mt :lol: :lol: bg pela ajuda

C

paty_trind:
oi
ah fiz o que tu disseste e no console ficou assim
Disciplina(historia):<[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]>
Disciplina(filosofia):<[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]>
nao ta mais dando aquele erro mas tu tinhas razão tinha haver com outros itens do programa mas ja ta solucionado:)
mt :lol: :lol: bg pela ajuda

Cada numero é um modulo da disciplina, os modulos se repetem??, sao tantos assim??

P

na verdade os modulos não se repetem varias vezes em cada disciplina eu pensei que fosse os modulos de todas as disciplinas juntas que estivessem aparecendo no console.Não são?

C
paty_trind:
na verdade os modulos não se repetem varias vezes em cada disciplina eu pensei que fosse os modulos de todas as disciplinas juntas que estivessem aparecendo no console.Não são?

insira o codigo System.out.println("Adicionou:<"+disciplina+"><"+numeroDoModulo+">"); para exibir oq esta sendo inserido na lista

while (resultado.next()) {
            String disciplina = resultado.getString(1);//exemplo    
            ArrayList<Integer> listaModulos = mapaDisciplina.get(disciplina);

            //verifica se ja existe disciplina, se n devemos criar    
            if (listaModulos == null) {
                //cria a lista de modulos    
                listaModulos = new ArrayList<Integer>();
                //adiciona a chave    
                listaDisciplinas.add(disciplina);
                //adiciona a lista no mapa    
                mapaDisciplina.put(disciplina, listaModulos);
            }
            int numeroDoModulo = resultado.getInt(2);//exemplo    
            listaModulos.add(numeroDoModulo);
            System.out.println("Adicionou:<"+disciplina+"><"+numeroDoModulo+">");
            System.out.println("Lista de modulos agora:<"+Arrays.toString(arrayDeModulos)+">");
        }
C

ops remova essa linha System.out.println(“Lista de modulos agora:<”+Arrays.toString(arrayDeModulos)+">");

P
agora o console ficou assim :shock:
Lista de modulos agora:<[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]>
Adicionou:<matematica><2>
Lista de modulos agora:<[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]>
Adicionou:<matematica><3>

...
sem o system meu codigo ta assim
...
								String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);  
								int colunas = arrayDeDisciplinas.length;  
								for (int c = 0; c < colunas; c++) {  
								    System.out.print("Disciplina("+arrayDeDisciplinas[c]+"):<");  
								    ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[c]);  
								    Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);  
								    System.out.print(Arrays.toString(arrayDeModulos)+">\n");  
								} ...
com o system
resultado = comando.executeQuery("select Id_disciplina,modulo from disc_modulo where ensino='"+1+"'");
								while (resultado.next())
								{ 
									String disciplina = resultado.getString(1);//exemplo  
									ArrayList<Integer> listaModulos = mapaDisciplina.get(disciplina);  
									  
									//verifica se ja existe disciplina, se n devemos criar  
									if (listaModulos == null) {  
									    //cria a lista de modulos  
									    listaModulos = new ArrayList<Integer>();  
									    //adiciona a chave  
									    listaDisciplinas.add(disciplina);  
									    //adiciona a lista no mapa  
									    mapaDisciplina.put(disciplina, listaModulos);  
									    
									}  
									int numeroDoModulo = resultado.getInt(2);//exemplo  
									listaModulos.add(numeroDoModulo);  
									String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);  
									 System.out.println("Adicionou:<"+disciplina+"><"+numeroDoModulo+">");  
									 ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[0]);  
										//Converter para array  
										Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);  
									    System.out.println("Lista de modulos agora:<"+Arrays.toString(arrayDeModulos)+">"); 
									
								}
						  
								 
								String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);  
								int colunas = arrayDeDisciplinas.length;  
								for (int c = 0; c < colunas; c++) {  
								    System.out.print("Disciplina("+arrayDeDisciplinas[c]+"):<");  
								    ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[c]);  
								    Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);  
								    System.out.print(Arrays.toString(arrayDeModulos)+">\n");  
								}

o q estou fazendo de errado?
:(
contei e vi que cada disciplina aparece 10 vezes fazendo da primeira maneira q tu mostrou.
E tipo entre < e > ficam somente os modulos daquela disciplina mas eles estão sendo exibidos inumeras vezes!!

C

int numeroDoModulo = resultado.getInt(2);//exemplo listaModulos.add(numeroDoModulo); System.out.println("Adicionou modulo <"+numeroDoModulo+">+" na disciplina <"+disciplina+">");//isso mostra o modulo q foi adicionado //Converter para array Integer[] arrayDeModulos = listaModulos.toArray(new Integer[0]); System.out.println("Lista de modulos agora:<"+Arrays.toString(arrayDeModulos)+">");
troque pelas linhas entre a 17 a 25 do seu ultimo codigo postado
oq deve aparecer sao os modulos adicionados
exemplo:
Adicionou modulo <1> na disciplina
Lista de modulos agora:<[1]>
Adicionou modulo <2> na disciplina
Lista de modulos agora:<[1, 2]>
Adicionou modulo <3> na disciplina
Lista de modulos agora:<[1, 2, 3]>
Adicionou modulo <1> na disciplina
Lista de modulos agora:<[1]>
Adicionou modulo <2> na disciplina
Lista de modulos agora:<[1, 2]>

C

verifique se quando muda a disciplina, a lista de modulos da disciplina volta a <[1]>

P

pelo console o que percebi foi o seguinte os modulos da disciplina se repetem 62 vezes a cada exibição da lista
O console ta assim

Disciplina(biologia):<Lista de modulos agora:<[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]> ... Adicionou modulo <1> na disciplina <biologia> Adicionou modulo <2> na disciplina <biologia> Adicionou modulo <3> na disciplina <biologia> Adicionou modulo <4> na disciplina <biologia> Adicionou modulo <5> na disciplina <biologia> Adicionou modulo <6> na disciplina <biologia>
e a lista se repete no console 8 vezes e este systemAdicionou modulo <1> na disciplina <biologia> se repete 7 vezes
isso é por causa do system estar dentro do laço do for mas os modulos(dentro deste systemDisciplina(biologia):<Lista de modulos agora:<[...) não deveriam aparecer varias vezes,neh?
:shock:
muito obrigada pela ajuda

C

"Adicionou modulo <1> na disciplina "(extatamente assim) so pode aparecer uma unica vez, se está aparecendo + de uma, entao ou no banco de dados possuem varias linhas repetidas ou existe uma outra coluna em que diferencia cada modulo e disciplina (exemplo Disciplina/Modulo/Professor sendo q cada modulo da disciplina pode ser lecionado por varios professores)

Entao verifique o banco de dados
se for mysql acho q a query é “select * from sua_tabela”

P

a minha tabela do banco esta igual ao print em anexo
mt :lol: :lol: obg pela ajuda e explicações


P

pelo que percebi os itens estão sendo exibidos no console quando a tela esta sendo carregada ,quando eu faço a escolha na combo para abrir a tela de modulos so q eu não sei por que razão os mesmos itens aparecem tantas vezes na tela.:frowning:
Se tivres outra sugestão de como arrumar isso ou sei la me mostrares o q estou fazendo de errado eu aceito :lol:
de qualquer forma obrigada pela ajuda e por todas as explicações
:lol:
ha uma maneira de controlar a quantidade de vezes que os modulos aparecem na lista ou seja da para limitar isso?

C

Na imagem, biologia so tem ate o modulo 5, mas esta adicionando o modulo 6
a disciplina artes tem varias linhas com 1 e 2 modulolos repetidos

o codigo abaixo ira impedir a inserçao se o numero do modulo for menor ou igual ao tamanho da lista evitando repetições
resultado = comando.executeQuery("select Id_disciplina,modulo from disc_modulo where ensino='" + 1 + "'");
        while (resultado.next()) {
            String disciplina = resultado.getString(1);//exemplo  
            ArrayList<Integer> listaModulos = mapaDisciplina.get(disciplina);

            //verifica se ja existe disciplina, se n devemos criar  
            if (listaModulos == null) {
                //cria a lista de modulos  
                listaModulos = new ArrayList<Integer>();
                //adiciona a chave  
                listaDisciplinas.add(disciplina);
                //adiciona a lista no mapa  
                mapaDisciplina.put(disciplina, listaModulos);

            }
            int numeroDoModulo = resultado.getInt(2);//exemplo  
            if (numeroDoModulo > listaModulos.size()) { //<<<
                moduloAnterior = numeroDoModulo;
                listaModulos.add(numeroDoModulo);
                String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);
                System.out.println("Adicionou:<" + disciplina + "><" + numeroDoModulo + ">");
                ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[0]);
                //Converter para array  
                Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);
                System.out.println("Lista de modulos agora:<" + Arrays.toString(arrayDeModulos) + ">");
            }//<<<
            

        }


        String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);
        int colunas = arrayDeDisciplinas.length;
        for (int c = 0; c < colunas; c++) {
            System.out.print("Disciplina(" + arrayDeDisciplinas[c] + "):<");
            ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[c]);
            Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);
            System.out.print(Arrays.toString(arrayDeModulos) + ">\n");
        }
//<<< onde modifiquei
C

vc passou a tabela errada, na aplicaçao ta ‘disc_modulo’, na imagem ‘disciplina_modulo_aluno’

P

oi bah desculpa eu mandei o print da tabela errada :oops:
to mandando a certa em anexo
to fazendo as alterações aqui
ja mando e bah mtoooooo obg pela ajuda :slight_smile:


P
ah fiz o que tu disseste e deu certinho sabe a exibição o problema é que isso é exibido um monteeeeee de vezes no console.Em anexo to colocando os itens que foram exibidos pelo console e ah o codigo ficou assim
....
while (resultado.next())
								{ 
									String disciplina = resultado.getString(1);//exemplo  
									ArrayList<Integer> listaModulos = mapaDisciplina.get(disciplina);  
									  
									//verifica se ja existe disciplina, se n devemos criar  
									if (listaModulos == null) {  
									    //cria a lista de modulos  
									    listaModulos = new ArrayList<Integer>();  
									    //adiciona a chave  
									    listaDisciplinas.add(disciplina);  
									    //adiciona a lista no mapa  
									    mapaDisciplina.put(disciplina, listaModulos);  
									    
									}  
									int numeroDoModulo = resultado.getInt(2);//exemplo  
									if (numeroDoModulo > listaModulos.size()) { //<<<  
								       int moduloAnterior = numeroDoModulo;  
								        listaModulos.add(numeroDoModulo);  
								        String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);  
								        System.out.println("Adicionou:<" + disciplina + "><" + numeroDoModulo + ">");  
								        ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[0]);  
								        //Converter para array    
								        Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);  
								        System.out.println("Lista de modulos agora:<" + Arrays.toString(arrayDeModulos) + ">");  
								    }//<<< 
								}
				....
obrigada pela ajuda
P
olha so dei uma alterada no codigo e consegui inserir alguns modulos na tela mas so da 1 disciplina como eu faço para inserir os modulos das demais? em anexo segue um print desta tela. O codigo é o seguinte:
for(int i=0;i<itensTela.length;i++)
					for(int j=0;j<itensTela[i].length;j++)
					{
							try{ int x = 0,y = 0;
								resultado = comando.executeQuery("select max(modulo) from disc_modulo ");
								while (resultado.next())
								{ 
									maior=resultado.getObject(1).toString();
								}
								if(maior!=null)
								{
									quantidade=Integer.parseInt(maior);
								}
/**repete 10 as disciplinas e os modulos repetem um monte de vzs entre os < e>**/
								resultado = comando.executeQuery("select Id_disciplina,modulo from disc_modulo where ensino='"+1+"'");//order by Id_disciplina
								while (resultado.next())
								{ 
									String disciplina = resultado.getString(1);//exemplo  
									ArrayList<Integer> listaModulos = mapaDisciplina.get(disciplina);  
									  
									//verifica se ja existe disciplina, se n devemos criar  
									if (listaModulos == null) {  
									    //cria a lista de modulos  
									    listaModulos = new ArrayList<Integer>();  
									    //adiciona a chave  
									    listaDisciplinas.add(disciplina);  
									    //adiciona a lista no mapa  
									    mapaDisciplina.put(disciplina, listaModulos);  
									    
									}  
									int numeroDoModulo = resultado.getInt(2);//exemplo  
									if (numeroDoModulo > listaModulos.size()) { //<<<  
								       int moduloAnterior = numeroDoModulo;  
								        listaModulos.add(numeroDoModulo);  
								        String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);  
								        System.out.println("Adicionou:<" + disciplina + "><" + numeroDoModulo + ">");  
								        ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[0]);  
								        //Converter para array    
								        Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);  
								        System.out.println("Lista de modulos agora:<" + Arrays.toString(arrayDeModulos) + ">");  
								    }//<<< 
								}
						  
								//Converter para array  
								String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);  
								int colunas = arrayDeDisciplinas.length;  
								for (int c = 0; c < colunas; c++) {  
								   // System.out.print("Disciplina("+arrayDeDisciplinas[c]+"):<");  
								    ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[c]);  
								    Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);  
								  //  System.out.println("Lista de modulos agora:<"+Arrays.toString(arrayDeModulos)+">"); 
								}  
							
								  
								ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[0]);   
								Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);  
								  
								
							    int colunas1 = arrayDeDisciplinas.length;  
							    int x1 = 0,y1 = 0;    
							    for (int c = 0; c < colunas1; c++) {  
							      
							        JCheckBox disciplina = new  JCheckBox(arrayDeDisciplinas[c]);  
							        disciplina.setBounds(y1, x1, 150, 25);  
							        getContentPane().add(disciplina);    // getContentPane().repaint();
							        y1 = y1 + 150;  
							       if(c==4 || c==9 || c==14 || c==19)
							       {
							    	    x1 = x1 + 250;
							    	    y1=0;
							       }
							          
							      
							    } 
							    /**pego o valor do maior modulo cadastrado no banco**/
							    String maiorModulo=null;int qntdeModulos=0;
							    resultado = comando.executeQuery("select max(modulo) from disc_modulo ");
								while (resultado.next())
								{ 
									 maiorModulo=resultado.getObject(1).toString();
								}
								if( maiorModulo!=null)
								{
									qntdeModulos=Integer.parseInt(maior);
								}
							    
							    int colunas11 = arrayDeModulos.length;  
							    int x11 = 0,y11 = 60;    
							    for (int c = 0; c < colunas11; c++) {  
							      
							        JCheckBox modulo = new  JCheckBox(""+arrayDeModulos[c]);  
							        modulo.setBounds(x11, y11, 150, 25);  
							       if(c<qntdeModulos)
							        y11+=30;
							       getContentPane().add(modulo);     //getContentPane().repaint();
							      // x11 = x11 + 150; 
							       if(c==6 || c==11 || c==17 || c==23)
							       {
							    	    y11 =30;
							    	    x11=0;
							       }
							          
							      
							    } 
							   
							    getContentPane().repaint();
							}
							catch(Exception excecao)
							{
								excecao.printStackTrace();
							}
						}
			
				
			}

P

olha so eu coloquei for (int c = 0; c < arrayDeModulos.length; c++) System.out.println("o conteudo do vetor de modulos é "+arrayDeModulos[c]+" na pos "+c);
antes do for de adicionar os modulos na tela e descobri que os modulos estão sendo sobreescritos e no final de tudo a lista so tem 6 modulos!!! :shock: como eu resolvo isso?no console ficou assim

Lista de modulos agora:<[1, 2, 3, 4, 5, 6]> o conteudo do vetor de modulos é 1 na pos 0 o conteudo do vetor de modulos é 2 na pos 1 o conteudo do vetor de modulos é 3 na pos 2 o conteudo do vetor de modulos é 4 na pos 3 o conteudo do vetor de modulos é 5 na pos 4 o conteudo do vetor de modulos é 6 na pos 5 o conteudo do vetor de modulos é 1 na pos 0 o conteudo do vetor de modulos é 2 na pos 1 o conteudo do vetor de modulos é 3 na pos 2 o conteudo do vetor de modulos é 4 na pos 3 o conteudo do vetor de modulos é 5 na pos 4 o conteudo do vetor de modulos é 6 na pos 5 (...)
obrigada pela ajuda :slight_smile:

C

//linha 37 troque por ArrayList<Integer> listaDeModulos = mapaDisciplina.get(disciplina);

//47 a 52 é teste, verifique se esta imprimindo corretamente, se estiver correto remova tudo System.out.println("--------------- :: Array Final :: ---------------"); for (int c = 0; c < colunas; c++) { System.out.print("Disciplina("+arrayDeDisciplinas[c]+"):<"); ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[c]); Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]); System.out.println("Lista de modulos agora:<"+Arrays.toString(arrayDeModulos)+">"); }

//remova linhas 55/56 //insira na linha 86 for (int indice = 0; indice < arrayDeDisciplinas.length; indice++) { ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[indice]);//lista de modulos da disciplina Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);//transforma em array //da linha 88 a 104, tera que mudar a logica para posicionar de forma correta //a cada loop, o array tera todos os modulos de cada disciplina respectivos ao que for imprimido na linha 47 a 52 //insira na linha 105+-, antes do repaint, para fechar o for }

Acredito q o array de modulos n tenha mudado para a disciplina, ou seja imprimiu varias vezes os modulos da mesma disciplina
é o “mapaDisciplina.get(arrayDeDisciplinas[indice]);” q pega a lista de modulos, para mudar a disciplina, precisa mudar o indice
no caso “listaDeModulos.toArray(new Integer[0]);” é sempre ‘0’ pois está sendo “transformado” em array, acredito q isso crie um espaço na memoria para alocar os elementos da lista, portanto se o valor for maior q do tamanho da lista, irá criar um array com tamanho diferente e com os indices restantes preenchidos com “null”

P
oii ChronosSage no momento o codigo esta assim:
Integer[] arrayDeModulos = null;
								
								resultado = comando.executeQuery("select Id_disciplina,modulo from disc_modulo where ensino='"+1+"'");//order by Id_disciplina
								while (resultado.next())
								{ 
									String disciplina = resultado.getString(1);//exemplo  
									ArrayList<Integer> listaModulos = mapaDisciplina.get(disciplina);  
									  
									//verifica se ja existe disciplina, se n devemos criar  
									if (listaModulos == null) {  
									    //cria a lista de modulos  
									    listaModulos = new ArrayList<Integer>();  
									    //adiciona a chave  
									    listaDisciplinas.add(disciplina);  
									    //adiciona a lista no mapa  
									    mapaDisciplina.put(disciplina, listaModulos);  
									    
									}  
									int numeroDoModulo = resultado.getInt(2);//exemplo  
									 listaModulos.add(numeroDoModulo); 
									if (! listaModulos.contains(numeroDoModulo) ) {  
								       int moduloAnterior = numeroDoModulo;  
								        listaModulos.add(numeroDoModulo);  
								        String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);  
								        System.out.println("Adicionou:<" + disciplina + "><" + numeroDoModulo + ">");  
								        ArrayList<Integer> listaDeModulos = mapaDisciplina.get(disciplina);    
								        //Converter para array  
								       arrayDeModulos = listaDeModulos.toArray(new Integer[0]);  
								        System.out.println("Lista de modulos agora:<" + Arrays.toString(arrayDeModulos) + ">");  
								  
									}//<<< 
								}
						  
								//Converter para array  
								String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);  
								int colunas = arrayDeDisciplinas.length;  
								System.out.println("--------------- :: Array Final :: ---------------");  
								for (int c = 0; c < colunas; c++) {      
								    System.out.print("Disciplina("+arrayDeDisciplinas[c]+"):<");      
								    ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[c]);      
								    arrayDeModulos = listaDeModulos.toArray(new Integer[0]);      
								    System.out.println("Lista de modulos agora:<"+Arrays.toString(arrayDeModulos)+">");     
								}    						
								  
								
							    int colunas1 = arrayDeDisciplinas.length;  
							    int x1 = 0,y1 = 0;    
							    for (int c = 0; c < colunas1; c++) {  
							      
							        JCheckBox disciplina = new  JCheckBox(arrayDeDisciplinas[c]);  
							        disciplina.setBounds(y1, x1, 150, 25);  
							        getContentPane().add(disciplina);    // getContentPane().repaint();
							        y1 = y1 + 150;  
							       if(c==4 || c==9 || c==14 || c==19)
							       {
							    	    x1 = x1 + 250;
							    	    y1=0;
							       }
							          
							      
							    } 
							   
								for (int indice = 0; indice < arrayDeDisciplinas.length; indice++) {  
								    ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[indice]);//lista de modulos da disciplina  
								     arrayDeModulos = listaDeModulos.toArray(new Integer[0]);//transforma em array  
								    //da linha 88 a 104, tera que mudar a logica para posicionar de forma correta  
								    //a cada loop, o array tera todos os modulos de cada disciplina respectivos ao que for imprimido na linha 47 a 52  
								//insira na linha 105+-, antes do repaint, para fechar o for  
								}  
							    int colunas11 = arrayDeModulos.length;  
							    int x11 = 0,y11 = 30;    
							    for (int c = 0; c < colunas11; c++) {  
							      
							        JCheckBox modulo = new  JCheckBox(""+arrayDeModulos[c]);  
							        modulo.setBounds(x11, y11, 150, 25);  
							        y11+=30;
							       getContentPane().add(modulo);     //getContentPane().repaint();						       
							       // x11 = x11 + 150; 
							       if(c==6 || c==11 || c==17 || c==23)
							       {
							    	    y11 =30;
							    	    x11=0;
							       }
							          
							      
							    } 
							   
							    getContentPane().repaint();
muito obrigada pela tua ajuda e explicações! segue em anexo um print da tela agora eu so vou editar para que os modulos fiquem embaixo da disciplina correta pq agora as disciplinas estão aparecendo na tela :)
P

bah acho que eu fiz algo errado pois so estão aparecendo os modulos 1,2,3 varias vezes :shock:
eu to mandando em anexo o conteudo do console,um print da tela(ainda to arrumando a disposição dos elementos) e minha classe.
Muito obrigada por tua ajuda e por tudo que tens me ensinado!


C
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;

public class TelaDeEscolhaModulos extends JInternalFrame implements ActionListener {

    private static final long serialVersionUID = 1L;
    Connection conexao;
    Statement comando;
    ResultSet resultado;
    String disciplinas[];
    String modulos[];
    Container tela;
    //String nome, List de modulos se int use Integer, se String use String
    HashMap<String, ArrayList<Integer>> mapaDisciplina = new HashMap<String, ArrayList<Integer>>();
    //chaves do mapa
    ArrayList<String> listaDisciplinas = new ArrayList<String>();
    JButton b, b1, b2;

    public TelaDeEscolhaModulos() {

        super("Ensino Medio");
        tela = getContentPane();
        tela.setLayout(null);

        try {
            conexao = conecta.conectabanco();
            comando = conexao.createStatement();
        } catch (Exception x) {
            JOptionPane.showMessageDialog(null, "Erro na conexÄo do banco");
        }

        try {
            resultado = comando.executeQuery("select Id_disciplina,modulo from disc_modulo where ensino='" + 1 + "'");//order by Id_disciplina
            while (resultado.next()) {
                String disciplina = resultado.getString(1);//exemplo
                ArrayList<Integer> listaModulos = mapaDisciplina.get(disciplina);

                //verifica se ja existe disciplina, se n devemos criar
                if (listaModulos == null) {
                    //cria a lista de modulos
                    listaModulos = new ArrayList<Integer>();
                    //adiciona a chave
                    listaDisciplinas.add(disciplina);
                    //adiciona a lista no mapa
                    mapaDisciplina.put(disciplina, listaModulos);

                }
                int numeroDoModulo = resultado.getInt(2);//exemplo

                if (!listaModulos.contains(numeroDoModulo)) {
                    listaModulos.add(numeroDoModulo);
                }
            }

            //Converter para array
            String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);
            int colunas = arrayDeDisciplinas.length;
            //Verifica se os modulos foram inseridos corretamente
            System.out.println("--------------- :: Array Final :: ---------------");
            for (int c = 0; c < colunas; c++) {
                ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[c]);
                Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);
                System.out.println("Disciplina(" + arrayDeDisciplinas[c] + ") Lista de modulos :<" + Arrays.toString(arrayDeModulos) + ">");
            }

            int qtdDisciplinas = arrayDeDisciplinas.length;
            int xD = 0, yD = 0;
            for (int c = 0; c < qtdDisciplinas; c++) {
                //Logica de inserçao dos componentes disciplina
                JCheckBox disciplinaJCheckBox = new JCheckBox(arrayDeDisciplinas[c]);
                disciplinaJCheckBox.setBounds(xD, yD, 150, 25);
                getContentPane().add(disciplinaJCheckBox);
                xD = xD + 150;
                if (c % 5 == 4) {//if (c == 4 || c == 9 || c == 14 || c == 19) { //muda linha
                    xD = 0;
                    yD = yD + 250;
                }


            }

            int xM = 0, yM = 30;
            for (int indice = 0; indice < qtdDisciplinas; indice++) { //para cada disciplina faça
                ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[indice]); //pega a lista de modulos
                Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);//transforma em array
                int qtdDeModulosDaDisciplinaSelecionada = arrayDeModulos.length;//qtdDeModulosDaDisciplinaSelecionada
                //Logica de inserçao dos componentes modulo
                for (int c = 0; c < qtdDeModulosDaDisciplinaSelecionada; c++) {//para cada modulo faça
                    JCheckBox modulo = new JCheckBox("" + arrayDeModulos[c]);
                    modulo.setBounds(xM, yM, 150, 25);
                    yM += 30;
                    getContentPane().add(modulo);

                }
                xM = xM + 150;
                yM = 30 + (indice/5)*250;
                
                if (indice % 5 == 4) {//if (c == 6 || c == 11 || c == 17 || c == 23) {//muda linha
                    xM = 0;
                }
            }

            getContentPane().repaint();
        } catch (Exception excecao) {
            excecao.printStackTrace();
        }

        setSize(400, 280);
        setVisible(true);
        setClosable(true);
        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
        setIconifiable(true);
        setMaximizable(true);
        setResizable(true);

    }

    public static void main(String args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new TelaDeEscolhaModulos().setVisible(true);
            }
        });
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
    }
}
clicke em "view plain" um botaozinho acima do codigo para facilitar a copia substitua(n mude nd a n ser a linha 38 onde ta "conexao = conecta.conectabanco();") e verifique se funciona, n esqueça de fazer uma copia doq vc fez antes de substituir n tenho bd, entao n posso testar e tambem tem um erro na linha 38 q n sei como resolver
P

ChronosSage obrigada!!!
agora aparecem os modulos de cada disciplina tela e o console fica assim

--------------- :: Array Final :: --------------- Disciplina(portugues) Lista de modulos :<[1, 2, 3, 4, 5, 6]> Disciplina(biologia) Lista de modulos :<[1, 2, 3, 4, 5, 6]> Disciplina(quimica) Lista de modulos :<[1, 2, 3, 4, 5, 6]> Disciplina(matematica) Lista de modulos :<[1, 2, 3, 4, 5, 6]> Disciplina(geografia) Lista de modulos :<[1, 2, 3, 4]> Disciplina(educacao fisica) Lista de modulos :<[1]> Disciplina(artes) Lista de modulos :<[1]> Disciplina(historia) Lista de modulos :<[1, 2, 3, 4]> Disciplina(filosofia) Lista de modulos :<[1, 2, 3]> Disciplina(sociologia) Lista de modulos :<[1, 2, 3]> --------------- :: Array Final :: --------------- Disciplina(portugues) Lista de modulos :<[1, 2, 3, 4, 5, 6]> Disciplina(biologia) Lista de modulos :<[1, 2, 3, 4, 5, 6]> Disciplina(quimica) Lista de modulos :<[1, 2, 3, 4, 5, 6]> Disciplina(matematica) Lista de modulos :<[1, 2, 3, 4, 5, 6]> Disciplina(geografia) Lista de modulos :<[1, 2, 3, 4]> Disciplina(educacao fisica) Lista de modulos :<[1]> Disciplina(artes) Lista de modulos :<[1]> Disciplina(historia) Lista de modulos :<[1, 2, 3, 4]> Disciplina(filosofia) Lista de modulos :<[1, 2, 3]> Disciplina(sociologia) Lista de modulos :<[1, 2, 3]>
agora é so arrumar os itens na tela mas dai isso eu consigo fazer por enquanto a tela ta assim conforme o print
muito obrigada pela ajuda :slight_smile:
pela paciencia :slight_smile:
explicacoes:):slight_smile:


C
mudei o codigo tava com problema, copie dnovo
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;

public class TelaDeEscolhaModulos extends JInternalFrame implements ActionListener {

    private static final long serialVersionUID = 1L;
    Connection conexao;
    Statement comando;
    ResultSet resultado;
    String disciplinas[];
    String modulos[];
    Container tela;
    //String nome, List de modulos se int use Integer, se String use String
    HashMap<String, ArrayList<Integer>> mapaDisciplina = new HashMap<String, ArrayList<Integer>>();
    //chaves do mapa
    ArrayList<String> listaDisciplinas = new ArrayList<String>();
    JButton b, b1, b2;

    public TelaDeEscolhaModulos() {

        super("Ensino Medio");
        tela = getContentPane();
        tela.setLayout(null);

        try {
            conexao = conecta.conectabanco();
            comando = conexao.createStatement();
        } catch (Exception x) {
            JOptionPane.showMessageDialog(null, "Erro na conexÄo do banco");
        }

        try {
            resultado = comando.executeQuery("select Id_disciplina,modulo from disc_modulo where ensino='" + 1 + "'");//order by Id_disciplina
            while (resultado.next()) {
                String disciplina = resultado.getString(1);//exemplo
                ArrayList<Integer> listaModulos = mapaDisciplina.get(disciplina);

                //verifica se ja existe disciplina, se n devemos criar
                if (listaModulos == null) {
                    //cria a lista de modulos
                    listaModulos = new ArrayList<Integer>();
                    //adiciona a chave
                    listaDisciplinas.add(disciplina);
                    //adiciona a lista no mapa
                    mapaDisciplina.put(disciplina, listaModulos);

                }
                int numeroDoModulo = resultado.getInt(2);//exemplo

                if (!listaModulos.contains(numeroDoModulo)) {
                    listaModulos.add(numeroDoModulo);
                }
            }

            //Converter para array
            String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);
            int colunas = arrayDeDisciplinas.length;
            //Verifica se os modulos foram inseridos corretamente
            System.out.println("--------------- :: Array Final :: ---------------");
            for (int c = 0; c < colunas; c++) {
                ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[c]);
                Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);
                System.out.println("Disciplina(" + arrayDeDisciplinas[c] + ") Lista de modulos :<" + Arrays.toString(arrayDeModulos) + ">");
            }

            int qtdDisciplinas = arrayDeDisciplinas.length;
            int xD = 0, yD = 0;
            for (int c = 0; c < qtdDisciplinas; c++) {
                //Logica de inserçao dos componentes disciplina
                JCheckBox disciplinaJCheckBox = new JCheckBox(arrayDeDisciplinas[c]);
                disciplinaJCheckBox.setBounds(xD, yD, 150, 25);
                getContentPane().add(disciplinaJCheckBox);
                xD = xD + 150;
                if (c % 5 == 4) {//if (c == 4 || c == 9 || c == 14 || c == 19) { //muda linha
                    xD = 0;
                    yD = yD + 250;
                }


            }

            int xM = 0, yM = 30;
            for (int indice = 0; indice < qtdDisciplinas; indice++) { //para cada disciplina faça
                ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[indice]); //pega a lista de modulos
                Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);//transforma em array
                int qtdDeModulosDaDisciplinaSelecionada = arrayDeModulos.length;//qtdDeModulosDaDisciplinaSelecionada
                //Logica de inserçao dos componentes modulo
                for (int c = 0; c < qtdDeModulosDaDisciplinaSelecionada; c++) {//para cada modulo faça
                    JCheckBox modulo = new JCheckBox("" + arrayDeModulos[c]);
                    modulo.setBounds(xM, yM, 150, 25);
                    yM += 30;
                    getContentPane().add(modulo);

                }
                xM = xM + 150;
                yM = 30 + (indice/5)*250;
                
                if (indice % 5 == 4) {//if (c == 6 || c == 11 || c == 17 || c == 23) {//muda linha
                    xM = 0;
                }
            }

            getContentPane().repaint();
        } catch (Exception excecao) {
            excecao.printStackTrace();
        }

        setSize(400, 280);
        setVisible(true);
        setClosable(true);
        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
        setIconifiable(true);
        setMaximizable(true);
        setResizable(true);

    }

    public static void main(String args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new TelaDeEscolhaModulos().setVisible(true);
            }
        });
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
    }
}
P

ChronosSage
muit :lol: obrigadaaaaaaa!!!
a tela esta perfeita!
obrigada de verdade pela ajuda:)
Segue um print desta tela
:lol:
obrigada de verdade por tudo!!!


Criado 25 de março de 2011
Ultima resposta 8 de abr. de 2011
Respostas 49
Participantes 3