Jump to content

Ayuda actionListener


Recommended Posts

Vamos por parte como dijo jack:

 

primero : tu problema de la carga infinita radica aquí :

 

 

while(true){

 

El archivo que estas leyendo tiene un fin es decir, tiene un numero limitado de linea a leer por lo tanto no tiene sentido que a tu ciclo while le pongas un true ya que como la condición a evaluar por defecto es true, tu siclo va a ser infinito

lo que quiero decir es que no va a dejar de iterar hasta que la condición se haga false ( nunca se hace false en tu programa) o salgas del while con alguna sentencia de escape como el break o return

 

Segundo : con respecto a la carga de los datos desde un txt

 

El método que usas no es optimo, en mi opinión estas usando fuerza bruta para cargarlos

 

	   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();

 

 

para no alargar mucho el post ( porque son muchos los errores que tienes ) voy a agregarte el código para cargar datos de un archivo, si tienes dudas me consultas despues

 

	File f = new File("c:/archivo.txt");
	try {
		BufferedReader bf = new BufferedReader(new FileReader(f));
		String linea=null;
		while ((linea=bf.readLine()) != null) {

			System.out.println(linea);
		}
	} catch (FileNotFoundException ex) {
		System.out.println("Archivo no encontrado");
	} catch (IOException ex) {
		System.out.println("Error");
	}

 

ojo, no estoy diciendo que no se pueda leer un archivo con la clase Scanner porque si se puede xd

 

puedes llenar inmediatamente tu comboBox si agregas esta linea al cuerpo del while

nombreDelComboBox.addItem(linea);

 

	File f = new File("c:/archivo.txt");
	try {
		BufferedReader bf = new BufferedReader(new FileReader(f));
		String linea=null;
		while ((linea=bf.readLine()) != null) {

			//System.out.println(linea);
			nombreDelComboBox.addItem(linea);
		}
	} catch (FileNotFoundException ex) {
		System.out.println("Archivo no encontrado");
	} catch (IOException ex) {
		System.out.println("Error");
	}

 

con esto queda solucionado tu problema de la carga infinita

 

ahora si quieres cargar un comboBox dinamicamente lo unico que tienes que hacer es jugar con los listener

 

 

En el siguiente codigo primero le agregamos un listener al combo Box luego en el cuerpo del metodo ActionPerformed preguntamos si el item seleccionado es igual a "click aqui" , si se cumple la condicion le quitamos el listener e invocamos el metodo cargarComboBoxFinal();

 

 

	jComboBox1.addActionListener(new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent ae) {
			if(jComboBox1.getSelectedItem().equals("---click aqui--")){
				jComboBox1.removeActionListener(this);
				cargarComboBoxFinal();
			}
		}
	});

aqui esta el codigo del metodo cargarComboBoxFinal() en donde se cargan los valores del archivo, se agregan al combobox y le asignamos otro listener

 

public void cargarComboBoxFinal() {
	jComboBox1.removeAllItems();
	File f = new File("c:/archivo.txt");
	try {
		BufferedReader bf = new BufferedReader(new FileReader(f));
		String linea = null;
		while ((linea = bf.readLine()) != null) {
			// System.out.println(linea);
			jComboBox1.addItem(linea);
		}
	} catch (FileNotFoundException ex) {
		System.out.println("Archivo no encontrado");
	} catch (IOException ex) {
		System.out.println("Error");
	}
	jComboBox1.addActionListener(new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent ae) {
			System.out.println(jComboBox1.getSelectedItem());
		}
	});
}

 

espero que entiendas

 

saludos

Link to comment
Share on other sites

Para empezar, tienes que implementar la interfaz ItemListener, así que agrégala a tu clase jframeparaprobar (o sea, tienes que agregarla después de implements). Y como el addItemListener está en la misma clase que el manejador del evento itemStateChanged simplemente le pones this como parámetro del addListener.

 

:mmm: ¿Cuál es la idea de poner esta línea en el constructor? :nose:

jframeparaprobar objeto = new jframeparaprobar();

:mmm: supongo que debería ser el constructor del JComboBox...y también la estás usando en el manejador del evento :blink:

 

Bueno, aquí hay ejemplo simple que encontré por ahí, para que tengas una idea:

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.Icon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainClass extends JPanel implements ItemListener {
 public MainClass() {
     JComboBox jc = new JComboBox(); 
     jc.addItem("Tongoy"); 
     jc.addItem("Arica"); 
     jc.addItem("Punta Arenas"); 
     jc.addItem("Los Vilos"); 
     jc.addItemListener(this); 
     add(jc); 
 }

 public void itemStateChanged(ItemEvent ie) {
     String s = (String)ie.getItem(); 
     System.out.println(s); 
 }

 public static void main(String[] args) {
   JFrame frame = new JFrame();
   frame.getContentPane().add(new MainClass());

   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setSize(200, 200);
   frame.setVisible(true);
 }

}

 


Sobre el ciclo while: No es infinito, sólo que está mal hecho. O sea, es como escribir un ciclo for de esta manera:

  i = 0;
  for(;;)
  {
     if(i >= 10) break;
     printf("voy en el %i\n",i);
     i++;
  }

eso funciona, pero es sacrílego... :tonto:

Edited by susodicho
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...