Boa Tarde a todos.
Eu estou tentando mover os arquivos de meu Jlist, tenho uma quantidade X de itens e queria q quando eu apertasse um botão o arquivo selecionado fosse para cima ou para baixo.
Eu já tenho o Jlist pronto e consigo adicionar e remover arquivos dele, só não consigui implementar os comandos de para cima e para baixo.
Se alguém souber como, agradeço.
olha, não testei ainda… mas você pode inserir o objeto na posição que quiser então você pode fazer o seguinte:
int posicao = 0; //posição que será colocado o elemento
idelemento = 0; //posição do elemento que será alterado a posição
jList.add(posicao, jList.get(idelemento));
jList.remove(idelemento);
teste aí… e vê se dá certo 
Ok vou testar, se alguem tiver mais algum exemplo por favor me informa.
Este é o código que eu estou usando.
[code]private void btnSubirActionPerformed(java.awt.event.ActionEvent evt) {
DefaultListModel dlm = (DefaultListModel) ListaArquivos.getModel();
ListaArquivos.setSelectionMode(
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
int[] indices = ListaArquivos.getSelectedIndices();[/code]
Ele pega item que está selecionado no JList, agora eu queria apertar o botão de subir e este botão subir na ordenação de arquivos.
[]s
Tente algo como:
// código do botão para subir uma posição
int selecionado = jList.getSelectedIndex();
jList.add(jList.getSelectedValue(), selecionado - 1);
jList.remove(selecionado);
Funciona com apenas um valor selecionado. É preciso adaptar para vários.
Cara deu um erro.
xception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.awt.Component
at AdvancedToscoPlayer.btnSubirActionPerformed(AdvancedToscoPlayer.java:552)
at AdvancedToscoPlayer.access$100(AdvancedToscoPlayer.java:28)
at AdvancedToscoPlayer$2.actionPerformed(AdvancedToscoPlayer.java:93)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6041)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5806)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4413)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
É verdade… você deve trabalhar com o ListModel do JList. Desculpa o erro. Seria algo como:
// código do botão para subir uma posição
// você deve ter um objeto do tipo DefaultListModel, por exemplo,
// se esse objeto se chamar modelo, fazemos algo como:
int selecionado = jList.getSelectedIndex();
modelo.add(selecionado - 1, modelo.get(selecionado));
modelo.remove(selecionado);
marcobiscaro2112 brigadão pela sua ajuda, o arquivo selecionado está subindo uma posição, mais ao invés dele trocar de posição com o que está a cima dele, ele se duplica. ai fica dois arquivos com o mesmo nome.
Eu queia poder alternar as posições, se eu apertar para subir, oq está em cima desce e oq está embaixo sobe.
Entendeu?
Muito obrigado pela a sua ajuda.
[quote=vini_rj2000]marcobiscaro2112 brigadão pela sua ajuda, o arquivo selecionado está subindo uma posição, mais ao invés dele trocar de posição com o que está a cima dele, ele se duplica. ai fica dois arquivos com o mesmo nome.
Eu queia poder alternar as posições, se eu apertar para subir, oq está em cima desce e oq está embaixo sobe.
Entendeu?
Muito obrigado pela a sua ajuda.
[/quote]
Sim, entendi. E imaginei que o método remove(int) fosse resolver isso… Talvez você deva usar no lugar de:
modelo.remove(selecionado);
Isso:
modelo.remove(selecionado + 1);
Vlw Marco muito obrigado, está funcionando agora, e se fosse a função de descer, eu tentei fazer as alterações no código mais não funcionou.
Como que ficaria?
E mais uma vez, muito obrigado !!!
Botão subir:
int selecionado = jList.getSelectedIndex();
modelo.add(selecionado - 1, modelo.get(selecionado));
modelo.remove(selecionado + 1);
Botão descer:
int selecionado = jList.getSelectedIndex();
modelo.add(selecionado + 1, modelo.get(selecionado));
modelo.remove(selecionado); // sem somar nem substrair!
OBS.: aqui não é feita nenhuma verificação para ter certeza que o usuário não vai selecionar o primeiro item e pressionar o botão para subir!! Você pode adicionar um listener ao JList e quando o usuário selecionar alguma opção, caso seja a primeira desabilita o botão subir (setEnabled(false)) e se for a última opção, desalibilita o botão descer.
Cara deu erro, quando eu seleciono o arquivo e aperto no botão para descer e nada acontece.
Erro de lógica de novo! Você deve usar no add o índice selecionado + 2.
Grande Marco !!!
Brigadão cara, pela sua ajuda, agora funcionou. :lol:
Dúvida resolvida = Tópico encerrado
Obrigado a todos