Pegar item selecionado na jlist

oi,
tenho uma tela com uma jlist de disciplinas e preciso adicionar em outra tela os modulos que correspondem a ou as disciplinas selecionadas e gostaria de saber como eu pego um item selecionado da jlist e como faço isto se ela esta em outra tela?!!!
obrigada


se a outra tela for relacionada a sua primeira vc pode mandar a tela aonde está sua LIST na hora de instanciar a segunda tela


[code] 
public class PrimeiraTela{

   SegundaTela sT = new SegundaTela(this);

}

[/code]



o metodo construtor da Segunda Tela fica assim

[code]
PrimeiraTela minhaVariavel;

public SegundaTela (PrimeiraTela pt){
          ......
          this.pt = minhaVariavel;
}
[/code]


dai vc  cria este metodo na primeira tela
[code] public JList getLista(){
   return suaLista;
}[/code]


quando vc for utilizar a lista da primera tela na segunda vc faz isso

[code] minhaVariavel.getLista(); // assim vc tem acesso aos metodos da primeiraTela na segundaTela
[/code]




[b]basicamente isso[/b]

[b]Editado para que fique mais facil de entender[/b]


Existe outra forma de fazer



crie uma classe de comunicação entre as telas



[code]
public class Integracao{

private  JList lista;


public void setList(JList suaLista){
   this.suaLista = lista;
}

public JList getList(){
   return lista;
}

}



[/code]


na primeiraTela voce faz isso


[code]
Integracao integra = new Integracao();
integra.setList(suaLista);
[/code]


na segundaTela vc recupera o valor fazendo isso

[code]
JList listaRecebeGet  // nao me lembro como criar o objeto Jlist
Integracao integraSegundaTela = new Integracao();
 listaRecebeGet = integraSegundaTela.getLista();
[/code]



[b][u][color=red] Aos que possam reclamar: se vc der CTRL + C, CTRL + V NÃO irá FUNCIONAR os codigos, eu não testei e tambem não vou testar... o objetivo e passar a LOGICA de como fazer, entendido? [/color] [/u][/b]

se a outra tela for relacionada a sua primeira vc pode mandar a tela aonde está sua LIST na hora de instanciar a segunda tela

public class PrimeiraTela{

   SegundaTela sT = new SegundaTela(this);

}

o metodo construtor da Segunda Tela fica assim

PrimeiraTela minhaVariavel;

public SegundaTela (PrimeiraTela pt){
          ......
          this.pt = minhaVariavel;
}

dai vc cria este metodo na primeira tela

public JList getLista(){ return suaLista; }

quando vc for utilizar a lista da primera tela na segunda vc faz isso

minhaVariavel.getLista(); // assim vc tem acesso aos metodos da primeiraTela na segundaTela

basicamente isso

Editado para que fique mais facil de entender

Existe outra forma de fazer

crie uma classe de comunicação entre as telas

public class Integracao{

private  JList lista;


public void setList(JList suaLista){
   this.suaLista = lista;
}

public JList getList(){
   return lista;
}

}


na primeiraTela voce faz isso

Integracao integra = new Integracao();
integra.setList(suaLista);

na segundaTela vc recupera o valor fazendo isso

JList listaRecebeGet  // nao me lembro como criar o objeto Jlist
Integracao integraSegundaTela = new Integracao();
 listaRecebeGet = integraSegundaTela.getLista();

[color=red] Aos que possam reclamar: se vc der CTRL + C, CTRL + V NÃO irá FUNCIONAR os codigos, eu não testei e tambem não vou testar… o objetivo e passar a LOGICA de como fazer, entendido? [/color]

[quote=paty_trind]oi,
tenho uma tela com uma jlist de disciplinas e preciso adicionar em outra tela os modulos que correspondem a ou as disciplinas selecionadas e gostaria de saber como eu pego um item selecionado da jlist e como faço isto se ela esta em outra tela?!!!
obrigada[/quote]

Oi,

Encapsulamento?

[code]public class Tela extends JFrame {

//.... chamando a tela 2
Tela2 secundaria = new Tela2();

// Recebendo o valor da JList.
secundaria.getValueListSelection();
}[/code]

No código da sua Tela2, teria um método chamado getValueListSelection() que retornaria o conteudo da lista selecionado.

Tchauzin!

obrigada Rafael!!
vou ajustar minhas telas aqui e qualquer coisa eu posto mas é exatamente isto que eu quero fazer!!!
:stuck_out_tongue:

gente não estou conseguindo !tipo eu fiz cmo o Rafael disseeuacho pelo menos
eu to usando modelos de jlist então este codigo eu fiz no modelo da 2 tela

Tela 1 tela; public tela2(Tela t) {this.tela=t; ..... resultado=comando.executeQuery("select modulo from aluno where disciplina='"+tela.getLista()+"'); ....

e este na tela 1 mesmo

public JLIst getLista() {return lista; }

ta dando nullpointerexceptin na linha de pesquisa no odelo da 2 tela
é pq eu fiz no modelo?
obg
=)

na tela1 na hora de criar a tela2 vc fez assim?

o NullPonteirExeption ocorre por tentar acessar um objeto que nao foi instanciado

poste seu codigo inteiro, e tente a segunda forma que postei acima no primeiro topico

outra coisa, para trabalhar com sql procure por PreparedStatement

outra coisa

isso não irá funcionar, pq a list é composta por varios elementos

tente fazer isso para vc entender

for(int x = 0; x < tela.getLista().size(); x++){
    System.out.println(tela.getLista().get(x));
}

dai vai mostrar o conteudo da lista

para fazer seu SQL vc vai ter que pegar cada valor da lista com o .get(index) e dai executar o sql

exemplo

for(int x = 0; x < tela.getLista().size(); x++){
    System.out.println(tela.getLista().get(x));

    resultado=comando.executeQuery("select modulo from aluno where disciplina='"+tela.getLista().get(x)+"');  

}

Rafa t tinhas razão eu so tinhadeclarado por isso tava dando nulllpointerexception mas olha so agora minha tela esta cm a jlist vazia tipo tm cmo eu selecionar primeiro as disciplinas e depoisa brir esta 2 tela?é q eu tinha criado um botão para depois q eu selecionasse as disciplinas aparecessem os modulos das mesmas na jlist da 2 tela
é possivel fazer assim ou eu prciso criar um jlist paracada disciplina?
mtooooooooo obrigada pela ajuda

para vc usar as informações da JList na segunda tela vc tem que carregar a lista com as informações antes de vc fazer o getList().

como assim selecionar as disciplinas??

vc tem que preencher a list antes de instanciar de usar o metodo getList()

como vc ta preenchendo a list?

posta o codigo se for possivel

oi
meu codigo da primeira classe é este

[code]import java.awt.Color;
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 javax.swing.AbstractListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.ListModel;
import javax.swing.event.ListDataListener;

import jxl.format.Border;

/Porque como os módulos são associados às disciplinas…
numa tela o usuário escolhe as disciplinas que o aluno irá fazer.
No outro, você mostra todos os módulos disponíveis para as disciplinas que ele selecionou.
Senão, vai ter que ficar controlando, toda vez que o usuário selecionar um módulo,
a disciplina daquele módulo também terá que ser selecionada…
*/
public class TelaDeDisciplinaModulo extends JFrame implements ActionListener{

private static final long serialVersionUID = 1L;
Container tela;
JButton b,b1,b2;
ArrayList<String> disciplinas=new ArrayList<String>();
JList listaDeDisciplinas;

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


	try{
		b=new JButton("ok");
		b.setBounds(20, 240, 90, 25);
		b.addActionListener(this);
		listaDeDisciplinas=new JList(new ModeloDeLista());
		listaDeDisciplinas.setBounds(20, 30, 250, 250);	
		b.addActionListener (new ActionListener (){  
			public void actionPerformed(ActionEvent e)
			{
				java.awt.EventQueue.invokeLater (new Runnable () {   
					public void run () {   
						new TelaDeModuloDasDisciplinas().setVisible (true);   
					}  
				});

			}});
	}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		

		//tela.add(b);
		tela.add(listaDeDisciplinas);
		setSize(850,300);
		setVisible(true);     
		setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);     
		setResizable(true);
	
}
public ArrayList<String> getDisciplinas()
{
	return disciplinas;
}
 public JList getLista()
 {
	 return listaDeDisciplinas;
 }

public static void main(String args[])
{
java.awt.EventQueue.invokeLater (new Runnable () {
public void run () {
new TelaDeDisciplinaModulo().setVisible (true);
}
});
}

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

}
}

///aqui esta meu modelo de jlist
class ModeloDeLista extends AbstractListModel
{
Connection conexao;
Statement comando;
ResultSet resultado;
ArrayList disciplinas;
JList listaDeDisciplinas;

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

		try{
			disciplinas=new ArrayList<String>();
			
			resultado = comando.executeQuery("select distinct Id_disciplina from disc_modulo where ensino='"+1+"' order by Id_disciplina");
			while (resultado.next())
			{ 
				disciplinas.add(resultado.getString(1));	
			}
			listaDeDisciplinas=new JList();
		}
			catch(Exception e)
			{
				e.printStackTrace();
			}
 }


public void addDisciplina(String d) {
	
	disciplinas.add(d);
}

@Override
public Object getElementAt(int index) {
		return disciplinas.get(index);
}


@Override
public int getSize() {
	return disciplinas.size();
}


public void removeDisciplina(int l) {
for(int i=0;i<disciplinas.size();i++)
{
	if(i==l)
	{
		disciplinas.remove(i);
	}
}
	
}

@Override
public void addListDataListener(ListDataListener arg0) {
	// TODO Auto-generated method stub
	
}

@Override
public void removeListDataListener(ListDataListener arg0) {
	// TODO Auto-generated method stub
	
}

}[/code]

e este é o codigo da minha 2 tela com seu respectivo modelo

[code]import java.awt.Container;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

import javax.swing.AbstractListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.event.ListDataListener;

public class TelaDeModuloDasDisciplinas extends JFrame{

private static final long serialVersionUID = 1L;
Container tela;
JButton b,b1,b2;
ArrayList<String> modulos=new ArrayList<String>();
JList listaDeModulos;

public TelaDeModuloDasDisciplinas()
{
	super ("Modulos");   
	tela = getContentPane ();
	tela.setLayout(null); 

	try{
	
		listaDeModulos=new JList(new ModeloDeListaModulo(new TelaDeDisciplinaModulo()));
		listaDeModulos.setBounds(20, 30, 250, 250);	
		
	}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		tela.add(listaDeModulos);
		setSize(850,300);
		setVisible(true);     
		setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);     
		setResizable(true);
		
		
	
}





public static void main(String[] args) {
	java.awt.EventQueue.invokeLater (new Runnable () {   
		public void run () {   
			new TelaDeModuloDasDisciplinas().setVisible (true);   
		}  
	});
}

}
class ModeloDeListaModulo extends AbstractListModel
{
Connection conexao;
Statement comando;
ResultSet resultado;
ArrayList modulos;
JList listaDeModulos;
TelaDeDisciplinaModulo td;

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

		try{
			this.td=td;
			modulos=new ArrayList<String>();
			//onde a disciplina for o q estiver selecionado na jlist da tela de disciplinas e ver se tem q criar uma jlist
			//para cada um
			resultado = comando.executeQuery("select distinct modulo from disc_modulo where ensino='"+1+"'and disciplina='"+td.getLista()+"' order by modulo");
			while (resultado.next())
			{ 
				modulos.add(resultado.getString(1));	
			}
			listaDeModulos=new JList();
		}
			catch(Exception e)
			{
				e.printStackTrace();
			}
 }

public void addDisciplina(String d) {
	
	modulos.add(d);
}

@Override
public Object getElementAt(int index) {
		return modulos.get(index);
}


@Override
public int getSize() {
	return modulos.size();
}


public void removeDisciplina(int l) {
for(int i=0;i<modulos.size();i++)
{
	if(i==l)
	{
		modulos.remove(i);
	}
}
	
}

@Override
public void addListDataListener(ListDataListener arg0) {
	// TODO Auto-generated method stub
	
}

@Override
public void removeListDataListener(ListDataListener arg0) {
	// TODO Auto-generated method stub
	
}

}[/code]
mtooo obg=)

pelo jeito a lista ta vazia pq vc nao está populando ela

a lista que vc tem que usar é esta disciplinas.add(resultado.getString(1));

esta lista vc tem que passar para a tela 2

ta abrindo a tela2 certinho com o modelo que te passei?? ta conseguindo ver o metodo getList da primeira tela apartir da tela2?

recomendo fortemente que vc separe seus codigos em classes diferentes e nao uma classe dentro da outra

[quote=rafaelviny]pelo jeito a lista ta vazia pq vc nao está populando ela

a lista que vc tem que usar é esta disciplinas.add(resultado.getString(1));

esta lista vc tem que passar para a tela 2

ta abrindo a tela2 certinho com o modelo que te passei?? ta conseguindo ver o metodo getList da primeira tela apartir da tela2?

recomendo fortemente que vc separe seus codigos em classes diferentes e nao uma classe dentro da outra[/quote]

mais uma coisinha

nao precisa do for to do para limpar a lista

use apenas isso

Rafa
mudei o meodo getLista na tela 1 e ficou assim

public ArrayList<String>getLista() {return disciplinas;}
agora os modulos aparecem mas sempreos mesmos tipo 1,2,3 sempre!
ah eu tnho q criar ua jlist para cada um(modulos)?
=(
ah e obg pelo conselho sobre uma classe na outra!

voce tem que tomar cuidado para nao enviar para a tela2 o list ( entenda-se list a JList ou ArrayList) antes de popular ele, o que provavelmente está acontecendo…

faz assim, antes de vc enviar apara a tela 2 faz ele imprimir na tela todos os valores da list que vc vai enviar

nao posso olhar detalhadamente seu codigo pq estou no meio da migração do ERP da empresa e to com meu tempo CURTISSSIMO, espero que entenda

reveja os meus post, eu editei todos colocando mais umas informações, mas vc ta indo no caminho certo, é so um detalhe que esta faltando

[quote=paty_trind]Rafa
mudei o meodo getLista na tela 1 e ficou assim

public ArrayList<String>getLista() {return disciplinas;}
agora os modulos aparecem mas sempreos mesmos tipo 1,2,3 sempre!
ah eu tnho q criar ua jlist para cada um(modulos)?
=(
ah e obg pelo conselho sobre uma classe na outra! [/quote]

é isso que a Jlist faz :smiley:

para vc pegar os modulos separados vc tem que fazer um for to do


String modulo = "";

for (int x = 0; x < lista.size(); x++){
   modulo = String.valueOf(lista.get(x));
}

ah este for vaitah dentro do try em q eu faço this.td=td; modulos=new ArrayList<String>(); for(....) resultado = comando.executeQuery("select distinct modulo from disc_modulo where ensino='"+1+"'and disciplina='"+td.getLista().get(i)+"' order by modulo"); while (resultado.next()) { modulos.add(resultado.getString(1)); } listaDeModulos=new JList(); //faço aki q tu me disseste agora=)

so mais uma coisa eu uso essa variavel modulo para add na tela tipo eu vo add ela?

 JList novaLista = td.getLista(); // recupera lista da tela1, lembra de estanciar por completo senao da NullPointExeption
 for(int x=0; x<novaLista.size(); x++){  // ve o tamanho da lista e percorre ela ate o fim
                 resultado = comando.executeQuery("select distinct modulo from disc_modulo where ensino='"+1+"'and disciplina='"+novaLista.get(x)+"' order by modulo");  
                 while (resultado.next())  
                 {   
                     modulos.add(resultado.getString(1));   // se na sua lista vc tiver 2 disciplinas o sql vai ser executado para as 2   
                 } 

tenta isso

nao, cada lista para uma utilidade

la no sql se vc quiser fazer o select por modulo tambem em vez da constante 1 vc vai ter que passar uma outra lista, so que dai a complexidade aumenta bastantinho, pq vc vai ter que classificar as listas…

ou usar um HashMap para mandar a materia e o modulo como se fosse uma tabela para fazer a verificação tipo assim:

modulo1, disciplina1
modulo1, disciplina2

ai vc vai ter que estudar

Rafa
olha so fiz o q tu disseste em relação a criação de uma nova lista mas ainda estão sendo exibidos os 3 modulos!
bah eu nãosei nada sobre hash map tmbm!
obg por toda ajuda
=)