Comparar conteudo da JList

Bom dia.
Como eu faço para comparar o conteúdo de dois JList?
Por exemplo tenho JList A que é carrega com os dados de uma tabela do banco de dados, e outra JList B que é carregada com o conteúdo de outra tabela filha da primeira.
Então pode ser que vão aparecer informações duplicadas nas duas JList.
Quero fazer o seguite ler os dois conteúdos JList A e JList B.
O que aparecer na JList B não deve aparecer na JList A.
Como eu faço isso?? É possível?

sim, A.removeAll(B);

Bom dia.
Da um erro:

sourceList.removeAll(destList); The method removeAll() in the type Container is not applicable for the arguments (Jlist)

sourceList é a Jlist A digamos e destList é a Jlist B mencionada na mensagem anterior

ops, não vi aquele J na frente das listas… isso vc usa pra remover de lista daquelas das collections. então, você vai precisar pegar os dados de suas JList e colocar em dois Vector, dar um removeAll() de um Vector no outro, e aí usar setListData, do JList, para alterar os dados do JList:

[code]Vector listaA, listaB;
ListModel listModel;

listaA = new Vector();
listModel = a.getModel();
for (int i = 0; i < listModel.getSize(); i++) {
listaA.add(listModel.getElementAt(i));
}

listaB = new Vector();
listModel = b.getModel();
for (int i = 0; i < listModel.getSize(); i++) {
listaB.add(listModel.getElementAt(i));
}

listaA.removeAll(listaB);
a.setListData(listaA);
[/code]

Valeu pelas dicas.
A tarde vou testar.

Para remover todos que aparecem na outra JList funcionol muito bem,
Agora quero remover o elemento selecionado com o mouse.
sourceList <=== É o Jlist que quero remover o registro selecionado com o mouse.

Tentei:

[code]Object selected[] = sourceList.getSelectedValues();
for (int i = selected.length - 1; i >= 0; --i) {
sourceList.remove(i);

}
[/code]

Mas não remove como posso fazer isso???

Bom dia.
Eu modifiquei um pouco a minha lógica para trabalhar com botões de adicionar e remover, passei a trabalhar com a classe DefaultListModel.
Então criei a seguinte lógica.

/[code]*** Fiz a definição***/
DefaultListModel modelsourceList;

/*Depois eu inicializo
modelsourceList = new DefaultListModel();

/**** Leio o banco de dados***/

uprs = stmt.executeQuery(“SELECT * FROM Qualificacoes”);
while (uprs.next()){
String codigo = uprs.getString(“Codigo_Qualificacao”);
String descricao = uprs.getString(“Descricao”);
modelsourceList.addElement(codigo + " - " + descricao);

}

/**** Ai neste ponto ocorre o erro: ***/
java.lang.NullPointerException
at cd0109.openQuery(cd0109.java:393)[/code]
Que é bem na minha que adiciono o elemento. O que pode ser?

O problema anterior qu resolvi so preciso saber como capturar o valor de tela da JList.
Tipo em tela esta codigo e descrição
10 - fundição,
Eu consigo captura o objeto

Object selected[] = sourceList.getSelectedValues();

Quero saber como pegar o valor 10 que esta me tela?

Bom, o método que vc está chamando remove os itens daquela posição da JList, mas você está simplesmente removendo os primeiros itens, já que vc vai de numero de itens selecionados - 1 até 0. Para remover os itens mesmo, ou você passa o índice dos que estão selecionados aí, ou passa os objetos para outro método:

sourceList.removeElement(selected[i]);

Nesse outro, acredito que o código ou a descrição possam estar vindo nulos, já que parece ok o resto…

flw

O problema de criar os registros em tela e remover eu já consegui solucionar.
A única coisa que falta fazer é conseguir capturar o valor de tela.
Vou dar o seguinte exemplo na tela tenho
Código e descrição.
10 - Fundição.
Quando eu clicar no botão de adicionar e jogar para a outra Jlist devo alimentar outra tabela do DB.
Com o código 10.
Eu consigo capturar o objeto do Jlist, da seguinte forma.

sourceList.getSelectedValues()

mas preciso pegar o valor 10.
Como eu faço isso é só que falta para terminar o programa.

você primeiro vai precisar criar uma classe que tenha estes dois atributos (ou usar alguma que já deve ter pronta), sobrescrever o método toString() dela para retorna o código mais o tracinho mais o nome, e no lugar de:

modelsourceList.addElement(codigo + " - " + descricao);

colocar:

modelsourceList.addElement(new SuaClasseComOsCamposAqui(codigo, descricao));

é bem parecido com o que ocorre aqui: http://www.guj.com.br/posts/preList/36663/194516.java#194516

Não deu muito certo pois quando eu crio o a minha lista eu faço o seguinte

[code]uprs2 = stmt2.executeQuery(“SELECT * FROM Qualificacoes”);
ArrayList myList = new ArrayList();
while (uprs2.next()){
String codigo = uprs2.getString(“Codigo_Qualificacao”);
String descricao = uprs2.getString(“Descricao”);
myList.add(codigo + " - " + descricao );
/*** Aqui eu crio a classe que guarda o nome e o código **/
JlistVO parent = new JlistVO(codigo,descricao );
parent.setCodigo(codigo);
parent.setNome(descricao);

}
String[] myListString = new String[myList.size()];
for(int i=0;i<myList.size();i++){
myListString[i] = (String) myList.get(i);
}
/**** Aqui eu alimento a minha lista**/
this.addSourceElements(myListString);

/**** Quando leio o elemento que estou adicionando para a outra Jlist***
private class AddListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
/**** Neste ponto quero recuperar o valor e gravar no banco***/
JlistVO parent = (JlistVO) sourceList.getSelectedValue();
System.out.println(parent.getCodigo());
Object selected[] = sourceList.getSelectedValues();
addDestinationElements(selected);
clearSourceSelected();
}
}[/code]

Mas ocorre o seguinte errro:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String at cd0109$AddListener.actionPerformed(cd0109.java:549)

Consegui resolver todos os problemas, já elimino, adiciono.
Se tem uma coisa que vou lhe pedir vai parecer besta, comparado aos outros problemas.
mas já tentei de todas as formas e nada.
Tenho uma String que vem gravado neste formato:
[10 - Fundição].
Quero decompor e pagar separadamente o código e a descrção
tipo gravar em uma variavel o valor 10 e em outra o valor fundição.
Como ficaria o código para decompor separar e eliminar os “[ ]” e o " - "

Bom, sei que resolver mas… esse trecho aqui:

myList.add(codigo + " - " + descricao ); /*** Aqui eu crio a classe que guarda o nome e o código **/ JlistVO parent = new JlistVO(codigo,descricao ); parent.setCodigo(codigo); parent.setNome(descricao);

na verdade deveria ser:

/*** Aqui eu crio a classe que guarda o nome e o código **/ JlistVO parent = new JlistVO(codigo,descricao ); parent.setCodigo(codigo); parent.setNome(descricao); myList.add(parent);

mas acho que vc deve ter feito isso pra arrumar…

já o outro problema, esse pode paracer besta mas eu não sei hehehehe… vou fazer uns testes e ver o que sai.

flw

Aqui esta funcionando tudo agora falta só a deconposição da string.
Muito obrigado pela ajuda.

bom, deve haver um método melhor que esse, mas este funciona ehehe

[code]package teste.guj;

public class TesteDescomporString {
public static void main(String[] args) {
String str = “10 - Testando-se”;
String[] separados = str.split("-", 2);
System.out.println(separados[0].trim());
System.out.println(separados[1].trim());
}
}
[/code]

isso aí sai na tela assim:

10 Testando-se

Veja se ajuda :slight_smile:

desta forma funciona se a string vier assim:
String str = “10 - Testando-se”;
O problema é que vem assim :
String str = “[10 - Testando-se]”;

Mostra no console:

[10
Testando-se]

É este o meu problema.

epa, verdade… hehehe tenta isso então:

[code]package teste.guj;

public class TesteDescomporString {
public static void main(String[] args) {
String str = “[10 - Testando-se]”;
str = str.substring(1, str.length() - 1);
String[] separados = str.split("-", 2);
System.out.println(separados[0].trim());
System.out.println(separados[1].trim());
}
}
[/code]

assim o 1º e o último caractere serão descartados antes do split()…

flw

Valeu era isso mesmo.
Agora sim , esta funcionando muito obrigado.