Java - doble click sobre JList

 
Vista:

doble click sobre JList

Publicado por ENARA (62 intervenciones) el 21/10/2006 16:48:13
Aupi!

Estoy intentado abrir una ventana al hacer el doble click en un JList.

Para ello tengo:

public class ControladorAvisos extends Controlador implements ListSelectionListener,MouseListener{

private JList jListAvisos;//la que me obtiene getSource con el evento seleccionado de la lista
private int indice;//indice del aviso seleccionado
private int id;//id del aviso
private String textoAviso;//texto del aviso

MargenAvisosParaHoy maph=MargenAvisosParaHoy.obtMargenAvisosParaHoy();

private static ControladorAvisos miControladorAvisos= new ControladorAvisos();

private ControladorAvisos() {
}

public static ControladorAvisos obtControladorAvisos(){
return miControladorAvisos;
}

public void valueChanged(ListSelectionEvent e) {
jListAvisos = (JList)e.getSource();
if(!jListAvisos.isSelectionEmpty()){
indice = jListAvisos.getSelectedIndex();
}
}

public void mouseClicked(MouseEvent e){
System.out.println("SE HA USADO EL RATON:: NUM CLICKS: "+ e.getClickCount()+ " INDICE DE LA LISTA: "+indice);
if (e.getClickCount() == 2) {
ControladorVentanaLeerAviso cvla=new ControladorVentanaLeerAviso();
id=maph.obtIdAviso(indice);
textoAviso=maph.obtTextoAviso(indice);
cvla.mostrar(id,id +" "+textoAviso);
}
}
...
}

y esto me sale en la consola:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

at pfc.packInterface.ControladorAvisos.mouseClicked(ControladorAvisos.java:58) CORRESPONDIENTE A : id=maph.obtIdAviso(indice);

at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)

at java.awt.Component.processMouseEvent(Component.java:5491)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)

at java.awt.Component.processEvent(Component.java:5253)

at java.awt.Container.processEvent(Container.java:1966)

at java.awt.Component.dispatchEventImpl(Component.java:3955)

at java.awt.Container.dispatchEventImpl(Container.java:2024)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)

at java.awt.Container.dispatchEventImpl(Container.java:2010)

at java.awt.Window.dispatchEventImpl(Window.java:1774)

at java.awt.Component.dispatchEvent(Component.java:3803)

SE HA USADO EL RATON:: NUM CLICKS: 2 INDICE DE LA LISTA: 2

at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

¿A alguien se le ocurre a qué se debe? Muchas gracias por molestaros en mirarlo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:doble click sobre JList

Publicado por chuidiang (950 intervenciones) el 22/10/2006 00:54:48
Hola:

El error es que maph es null en el momento de la llamada a id=maph.obtIdAviso(indice);

Veo que maph lo obtienes con un obtMargenAvisosParaHoy(); que devuelve un atributo estático.

Java en ocasiones es raro y es posible que en el momento de la llamada no se haya inicializado el atributo estatico (ten en cuenta que lo has puesto detrás de la llamada). Prueba o bien haz algo como esto

private static ControladorAvisos miControladorAvisos=null;
public static ControladorAvisos obtControladorAvisos()
{
if (miControladorAvisos==nulL)
miControladorAvisos = new ControladorAvisos ();
return miControladorAvisos;
}

así seguro que te funciona.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:doble click sobre JList

Publicado por Enara (62 intervenciones) el 22/10/2006 19:54:43
He hecho lo que me has dicho pero no cambia nada; se debía a que...

MargenAvisosParaHoy maph=MargenAvisosParaHoy.obtMargenAvisosParaHoy();

... llamaba a obt al declarar la variable. Si llamo a obt antes de...

id=maph.obtIdAviso(indice);

... se soluciona pero sige dandome otro problema.

*** MUCHAS GRACIAS DE TODAS FORMAS ***
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:doble click sobre JList

Publicado por Marcelo (2 intervenciones) el 31/10/2006 15:20:01
Mirá ENARA, no soy un experto en java ni menos que eso porque recién estoy haciendo mis primeros pininos pero creo que te falta registrar el componente para que reaccione ante el evento.
Algo así como:

jListAvisos.addMouseListener(this);

dentro de la clase que contiene al JList.

No he hecho pruebas para asegurarte que sea la solución, pero me parece que deberías buscar por ahí.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar