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
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.