Pegar socket selecionado em combo

4 respostas
Lana_Csil

Bom dia!!

Possuo um combo que contem todos os clientes que são conectados ao meu servidor (aplicação chat), esses clientes são do tipo Socket.
Gostaria de pegar o socket selecionado no combo sem transformar seu tipo para string ou int, pois preciso dele assim para passar como parâmetro em um método que envia mensagem.
Existe algo do tipo?

Socket destino = comboDestino.Selected(...)

Desde já agradeço!

4 Respostas

Preco

Sobrescreva o método toString() do Socket, fazendo ele retornar o que você quer que apareça no combo.
Daí na hora de adicionar itens ao combo, adicione o objeto Socket.

Depois, pra recuperar, basta chamar

Socket socket = (Socket)seuCombo.getSelectedItem();

Lana_Csil

Preco, obrigada pela resposta! Mas deu um erro maior do mundo agora:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.net.Socket at fontes.Servidor.btnEnviarSActionPerformed(Servidor.java:274) at fontes.Servidor.access$000(Servidor.java:20) at fontes.Servidor$1.actionPerformed(Servidor.java:71) 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:6263) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6028) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

:confused:

Lana_Csil

Preco, agora deu certo,
adicionei os sockets assim em meu combo:

cmbDestino.insertItemAt(cliente, index++); //onde cliente é o socket

Porém no combo ta aprecendo um montão de informaçoes, mas eu gostaria que mostrasse apenas o ip ou o nome da máquina…Tem como mascarar essas informações na visualização?

Preco

Você poderia colar seu código?

Eu fiz um teste rápido aqui, ficou assim:

  1. Na parte que adiciona os sockets no combo:
ArrayList<Socket> lista = new ArrayList<Socket>();
        lista.add(new Socket(){
            public String toString(){
                return "" + this.getLocalPort();// Aqui você coloca o que quer que apareça no combo, como o IP, por exemplo
            }
        });
        for (Socket s: lista){            
            jComboBox1.addItem(s);
        }
  1. Daí criei um botão, e no actionPerformed desse botão, eu botei:
Socket soc = (Socket)jComboBox1.getSelectedItem();
System.out.println("Socket: " + soc);

E ele me retornou o Socket corretamente…

Criado 19 de outubro de 2010
Ultima resposta 19 de out. de 2010
Respostas 4
Participantes 2