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!!!
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
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
=)