Mover arquivo Jlist

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 :smiley:

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