juckion Posted December 8, 2011 Report Share Posted December 8, 2011 Hola buenas tardes Agradeceria mucho al que me pudiera ayudar, necesito terminar una aplicacion la cual carga datos a un jcombobox de forma dinamica ( desde un fichero) Para lo cual para poder hacerlo estoy utilizando un actionListener sobre el jcombobox pero el problema esta en que le agregue una opción que al presionar la opcion del combobox muestra un item "presionar aqui" entonces el problema aca surge en que si presiono mas de una vez esa opcion no para de cargar los mismos datos. Por eso mismo vengo a este foro a consultar que poder hacer para revertir esta situacion (al presionar "presione aqui" se deberia desplegar solo una vez las opciones) De verdad agradeceria la ayuda por que la necesito urgentemente Dejo el codigo. public ReservarBoleto() { initComponents(); btnUsuarioFida.addItem("seleccione item de la lista"); btnUsuarioHida.addItem("Seleccione item de la lista"); } private void btnUsuarioFidaActionPerformed(java.awt.event.ActionEvent evt) { btnUsuarioFida.addActionListener(this); } public void actionPerformed (ActionEvent e){ if (e.getSource() == btnUsuarioFida){ try{ Scanner sc = new Scanner (new File ("c:/tomardatos.txt")); while(true){ if (sc.hasNextLine()==false)break; sc.nextLine(); sc.nextLine(); sc.nextLine(); sc.nextLine(); sc.nextLine(); sc.nextLine(); sc.nextLine(); sc.nextLine(); sc.nextLine(); sc.nextLine(); sc.nextLine(); String FechaIda = sc.nextLine().toString(); String FechaRegreso = sc.nextLine(); sc.nextLine(); sc.nextLine(); sc.nextLine(); sc.nextLine(); btnUsuarioFida.addItem(FechaIda); btnUsuarioFregreso.addItem(FechaRegreso); } } catch(IOException x) {System.out.println("error");}; }} Link to comment Share on other sites More sharing options...
AshWilliams Posted December 8, 2011 Report Share Posted December 8, 2011 (edited) El problema sería que te carga muchas veces los mismos datos en el combobox??...algo asi: Primera vez:PerasManzanasUvas Segunda vez: PerasManzanasUvasPerasManzanasUvas Algo asi y hasta el infinito y mas allá ??...eso es lo que te pasa o no?? Saludos :krider: Edited December 8, 2011 by rob_loser Link to comment Share on other sites More sharing options...
juckion Posted December 8, 2011 Author Report Share Posted December 8, 2011 Si eso mismo...si apreto el boton carga datos de forma infinita. Link to comment Share on other sites More sharing options...
susodicho Posted December 8, 2011 Report Share Posted December 8, 2011 Por lo que entendí de tu código, creo que debes eliminar esto: private void btnUsuarioFidaActionPerformed(java.awt.event.ActionEvent evt) { btnUsuarioFida.addActionListener(this); } y cualquier referencia a él (al parecer lo estás usando como manejador de evento). Si no quieres borrarlo, simplemente enciérralo como comentario. Y deberías poner en alguna parte (cuando se inicia el formulario que tiene el botón) la línea: btnUsuarioFida.addActionListener(this); así que creo que iría en el constructor ReservarBoleto, o sea, quedaría así: public ReservarBoleto() { initComponents(); btnUsuarioFida.addItem("seleccione item de la lista"); btnUsuarioHida.addItem("Seleccione item de la lista"); btnUsuarioFida.addActionListener(this); } Otra cosa, arregla la forma en que lees las líneas desde el archivo. Y tienes que poner una condición en el ciclo while, creo que es obvio cuál es... Link to comment Share on other sites More sharing options...
juckion Posted December 8, 2011 Author Report Share Posted December 8, 2011 (edited) Por lo que entendí de tu código, creo que debes eliminar esto: private void btnUsuarioFidaActionPerformed(java.awt.event.ActionEvent evt) { btnUsuarioFida.addActionListener(this); } y cualquier referencia a él (al parecer lo estás usando como manejador de evento). Si no quieres borrarlo, simplemente enciérralo como comentario. Y deberías poner en alguna parte (cuando se inicia el formulario que tiene el botón) la línea: btnUsuarioFida.addActionListener(this); así que creo que iría en el constructor ReservarBoleto, o sea, quedaría así: public ReservarBoleto() { initComponents(); btnUsuarioFida.addItem("seleccione item de la lista"); btnUsuarioHida.addItem("Seleccione item de la lista"); btnUsuarioFida.addActionListener(this); } Otra cosa, arregla la forma en que lees las líneas desde el archivo. Y tienes que poner una condición en el ciclo while, creo que es obvio cuál es...No es efectivo tu metodo ya que al momento de ingresar la clausula btnUsuarioFida.addActionListener(this); indica que hay fugas en el constructor (En todo caso hice unas modificaciones en el constructor para pasar parametros. de todas maneras los dejo aca. public class ReservarBoleto extends javax.swing.JFrame implements ActionListener {int asientoEcoTrans;int asientoEjeTrans;int asientoPrimTrans; public ReservarBoleto(int asientoEcoTrans, int asientoEjeTrans, int asientoPrimTrans) { initComponents(); this.asientoEcoTrans = asientoEcoTrans; this.asientoEjeTrans = asientoEjeTrans; this.asientoPrimTrans = asientoPrimTrans; btnUsuarioFida.addItem("seleccione item de la lista"); btnUsuarioHida.addItem("Seleccione item de la lista"); btnUsuarioFregreso.addItem("Seleccione fehca de regreso"); } private void btnUsuarioFidaActionPerformed(java.awt.event.ActionEvent evt) { btnUsuarioFida.addActionListener(this); btnUsuarioFregreso.addActionListener(this); UsuarioCiudadIda.addActionListener(this); btnUsuarioCiudadRegreso.addActionListener(this); btnUsuarioHida.addActionListener(this); btnUsuarioHregreso.addActionListener(this); } Gracias por tu tiempo y tu respuesta. Edited December 8, 2011 by juckion Link to comment Share on other sites More sharing options...
susodicho Posted December 8, 2011 Report Share Posted December 8, 2011 :mmm: Lo que todavía no logro entender es cómo sabes cuál es el evento que se está produciendo. O sea, un control puede reaccionar a varios eventos (cuando el mouse pasa por encima, cuando le hacen clic, cuando se actualiza, etc.). Esa parte no la veo en ningún lado, y puede ser que el manejador del evento (actionPerformed) se esté ejecutando por varios eventos distintos al que tú quieres manejar ¿no debería haber algo por ahí que indique que sólo se ejecute al hacer clic, y no con otros eventos?O quizás deberías verificar el parámetro "ActionEvent e"... Además no sé desde dónde se llama a private void btnUsuarioFidaActionPerformed(java.awt.event.ActionEvent evt) Link to comment Share on other sites More sharing options...
juckion Posted December 9, 2011 Author Report Share Posted December 9, 2011 (edited) Mira lo que tengo es una carga de parametros que se van a pasar al actionperformed en el metodo public void actionPerformed (ActionEvent e) en el cual ese metodo lee todos los datos que solicito y luego en el privado (private void actionPerformed) cargo lo correspondiente a lo que se solicitó en el metodo public...mira para hacerla mas corta...hice algo como esto, la unica difierencia es q lo adapte al actionperformed para el combobox. La carga se hace desde el this.http://www.youtube.com/watch?v=5Y-UEUS9s0Q&feature=relmfu gracias por el tiempo de lectura. Edited December 9, 2011 by juckion Link to comment Share on other sites More sharing options...
susodicho Posted December 9, 2011 Report Share Posted December 9, 2011 :mmm: Creo que ya estoy cachando el algo, por lo que entiendo, la interfaz ActionListener es la interfaz padre y hay otras varias especializadas que sirven para manejar eventos más específicos. Ahí es donde estaría el problema, ActionListener es muy general y tú necesitas un manejador de eventos específico para un JComboBox. Creo que la interfaz que te serviría sería ItemListener, entonces, en vez de implementar un actionPerformed, tendrías que implementar un itemStateChanged y revisar los campos SELECTED y DESELECTED de la clase ItemEvent.Para agregar el manejador del evento, necesitarías usar addItemListener. Pero de todas formas creo que tienes que poner el addItemListener en el constructor... Y creo que el método private void btnUsuarioFidaActionPerformed(java.awt.event.ActionEvent evt) no está siendo llamado en ninguna parte... Link to comment Share on other sites More sharing options...
juckion Posted December 9, 2011 Author Report Share Posted December 9, 2011 Gracias. Voy a intentar eso. Link to comment Share on other sites More sharing options...
juckion Posted December 9, 2011 Author Report Share Posted December 9, 2011 Oie perdon por volver a molestarte pero intente implementar lo que dijiste pero me sigue con el mismo problema y segundo que objeto en este caso tendria q implementar en el addItemListener?Perdona por molestar de nuevo pero de verdad q me urge este temita D:import java.io.*;import java.util.*;import java.awt.event.*;public class jframeparaprobar extends javax.swing.JFrame implements EventListener { /** Creates new form jframeparaprobar */ public jframeparaprobar() { initComponents(); jComboBox1.addItemListener(¿que agregar aca?); jframeparaprobar objeto = new jframeparaprobar(); }public void itemStateChanged(ItemEvent e){ if (e.getSource() == jComboBox1){ try{ Scanner sc = new Scanner (new File ("c:/ingresovuelo.txt")); while(true){ if (sc.hasNextLine()==false)break; sc.nextLine(); sc.nextLine(); sc.nextLine(); String precioAsientoEco = sc.nextLine();//precio asiento eco sc.nextLine(); String precioAsientoEje = sc.nextLine();//precio asiento eje sc.nextLine(); String precioAsientoPrim = sc.nextLine();//precio asiento prim sc.nextLine(); String ciudadOrigen = sc.nextLine(); String ciudadDestino = sc.nextLine(); String FechaIda = sc.nextLine().toString(); String FechaRegreso = sc.nextLine(); String horaRegreso =sc.nextLine(); String minutoRegreso = sc.nextLine(); String horaIda =sc.nextLine(); String minutoIda = sc.nextLine(); //this.asientoEcoTrans = Integer.parseInt(precioAsientoEco); //this.asientoEjeTrans = Integer.parseInt(precioAsientoEje); //this.asientoPrimTrans = Integer.parseInt(precioAsientoPrim); jComboBox1.addItem(precioAsientoEco); jComboBox1.removeAllItems(); jframeparaprobar objeto = new jframeparaprobar();} } catch(IOException x) {System.out.println("error");}; } Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now