Foros del Web » Programación para mayores de 30 ;) » Java »

Probblema con JTableModel

Estas en el tema de Probblema con JTableModel en el foro de Java en Foros del Web. Hola a todos mirad tengo un problemilla con un jTablemodel resulta que contiene 5 columnas nombradas: matricula, marca, modelo, Tipo motor, clase. En cada una ...
  #1 (permalink)  
Antiguo 28/08/2012, 08:42
 
Fecha de Ingreso: noviembre-2010
Mensajes: 16
Antigüedad: 13 años, 5 meses
Puntos: 0
Probblema con JTableModel

Hola a todos mirad tengo un problemilla con un jTablemodel resulta que contiene 5 columnas nombradas: matricula, marca, modelo, Tipo motor, clase.

En cada una cuando agrego un nuevo coche sale su correspodiente atributo, el problema es que cuando modifico por cualquier cosa ese coche los atributos se cambian en marca se pone modelo y en el tipo de motor me aparece la case (berlina, familiar, cabrio,Todoterreo) y mira que he estado mirando el codigo en la clase modificar coche pero no veo donde coj... tengo cambiado eso, asi que antes de volverme loco os pido ayuda, aqui os pongo el codigo de modificar coche:

Código HTML:
public class ModificarCoche implements ActionListener {

public static final long serialVersionUID = 1L;
	
	//Objeto Vehiculo
	
	Coche coche;
	ArrayList<Integer> listaEspecificaciones = new ArrayList<Integer>();
	GestionarCoche gC = new GestionarCoche();
	PanelEspecificaciones panelEspecificaciones;
	String clase = "Berlina";
	String matricula;
	String marca;
	String modelo;
	String tipoMotor;
	String concesionario;
		
	JPanel panelPrincipal = new JPanel();
	

	//Definimos los campos
	
	public JComboBox concesionarioCoche = new JComboBox();
	public JTextField marcaCoche = new JTextField(10);
	public JComboBox claseCoche = new JComboBox();
	public JTextField modeloCoche = new JTextField(10);
	public JComboBox tipoMotorCoche = new JComboBox();
	public JComboBox campoMatriculaCoche = new JComboBox();

	private JPanel panelAddVehiculoBoton;
	
	
	//Metodo constructor que nos inicializa la ventana secundaria.
	
	public ModificarCoche() {
		
		JDialog ventanaModVehiculo = new JDialog();		
		System.out.println("Marca: "+marca+"Modelo :"+modelo+"Especificaciones: "+listaEspecificaciones);
		ventanaModVehiculo.setTitle("Modificar Coche");
		ventanaModVehiculo.setContentPane(getPanelPrincipal());
		ventanaModVehiculo.setModal(true);
		ventanaModVehiculo.pack();
		ventanaModVehiculo.setLocationRelativeTo(null);
		ventanaModVehiculo.setVisible(true);
	}
	
	public Coche definirVehiculo(String matricula){
		
		coche =  gC.sacarDeFichero(matricula);
		concesionario = coche.getConcesionario();
		marca = coche.getMarca();
		modelo = coche.getModelo();
		clase = coche.getClase();
		tipoMotor = coche.getTipoMotor();
		listaEspecificaciones = coche.sacarAtributos();
		
		return coche;
	}
	
	//Panel principal que contendra el panel de campos y el panel del boton agregar
	
	public JPanel getPanelPrincipal(){
		panelPrincipal.setLayout(new BoxLayout(panelPrincipal,BoxLayout.PAGE_AXIS));
		panelPrincipal.add(getPanelLabel());
		panelPrincipal.add(getPanelAddCoche());
		panelPrincipal.add(getJpanelEspecificaciones());
		panelPrincipal.add(getPanelAddCocheBoton());
		panelPrincipal.setBorder(BorderFactory.createEmptyBorder(15,15,15,15));
		return panelPrincipal;
	}
	
	//Panel de Campos (NORTE)
	public JPanel getPanelAddCoche(){
		JPanel panelAddVehiculo = new JPanel();
		panelAddVehiculo.setLayout(new GridLayout(0,2));
		panelAddVehiculo.add(new JLabel("Matricula"));
		panelAddVehiculo.add(getCampoMatriculaCoche());
		panelAddVehiculo.add(new JLabel("Concesionario"));
		panelAddVehiculo.add(getConcesionarioCoche());
		panelAddVehiculo.add(new JLabel("Marca"));
		panelAddVehiculo.add(marcaCoche);
		panelAddVehiculo.add(new JLabel("Modelo"));
		panelAddVehiculo.add(modeloCoche);
		panelAddVehiculo.add(new JLabel("Tipo Motor"));
		panelAddVehiculo.add(getTipoMotorCoche());
		panelAddVehiculo.add(new JLabel("Clase"));
		panelAddVehiculo.add(getClaseCoche());
		panelAddVehiculo.setBorder(BorderFactory.createEmptyBorder(15,15,0,15));
		
	return panelAddVehiculo;
	}
	
	
	//Instanciamos el panel de especificaciones
	
	public JPanel getJpanelEspecificaciones(){
		
		JPanel jpanelEspecificaciones = new JPanel();
		jpanelEspecificaciones.setLayout(new GridBagLayout());
		
		try {
			panelEspecificaciones = (PanelEspecificaciones) Class.forName("ucam.aplicacion.Coches.PanelEspecificaciones"+clase).newInstance();
		} catch (InstantiationException e) {
			
			e.printStackTrace();
		} catch (IllegalAccessException e) {
		
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			
			e.printStackTrace();
		}
		jpanelEspecificaciones.add(panelEspecificaciones.getPanelEspecificaciones());
		
		return jpanelEspecificaciones;	
		
	}
	//Panel con texto/encabezado
	
	private JPanel getPanelLabel(){
		JPanel panelLabel = new JPanel();
		JLabel label = new JLabel("Modificar Coche");
		panelLabel.setLayout(new BorderLayout());
		panelLabel.add(label);
		return panelLabel;
	}
		
	
	
	//Generamos los dos JCombo Box

	public JComboBox getClaseCoche() {
		
		//Puesto que el objeto claseCoche lo defino fuera del metodo, con este condicional
		//hago que no puedan agrearse mas lineas al JComboBox que ya esta instanciado
		
		if (claseCoche.getItemCount() == 0){
			
			//Los atributos que se cargaran en el JComboBox los extraemos del fichero propiedades
			
			GestionarPropiedades gP = new GestionarPropiedades();
			String clase = gP.sacarClases();
			String[] arraymodelo = clase.split(" "); //Las comillas nos listan todo 						
				for(int i = 0 ;i<arraymodelo.length ; i++){
					claseCoche.addItem(arraymodelo[i]);
				}
		}
		claseCoche.addActionListener(this);
			return claseCoche;
	}
	
	
	public JComboBox getConcesionarioCoche() {
		if (concesionarioCoche.getItemCount() == 0){
		GestionarConcesionario gC = new GestionarConcesionario();
		Hashtable hashConcesionarios = gC.reCargar();
		concesionarioCoche.addItem("Seleccione un concesionario.. ");
		
		for(Enumeration e = hashConcesionarios.keys(); e.hasMoreElements();){
			
    		Object obj = e.nextElement();
    		
		concesionarioCoche.addItem(obj);
		}	
		concesionarioCoche.addActionListener(listenerConcesionario);
		}
		
		
		
		return concesionarioCoche;
		
	}
  #2 (permalink)  
Antiguo 28/08/2012, 08:50
 
Fecha de Ingreso: noviembre-2010
Mensajes: 16
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Probblema con JTableModel

Código HTML:
	
	
	//ComboBox con lista de coches
	
	public JComboBox getCampoMatriculaCoche() {
		if (campoMatriculaCoche.getItemCount() == 0){
		GestionarCoche gC = new GestionarCoche();
		Hashtable hashCoches = gC.reCargar();
		campoMatriculaCoche.addItem("Seleccione una matricula.. ");
		
		for(Enumeration e = hashCoches.keys(); e.hasMoreElements();){
			
    		Object obj = e.nextElement();
    		
		campoMatriculaCoche.addItem(obj);
		}	
		campoMatriculaCoche.addActionListener(listenerMatricula);
		}
		
		
		
		return campoMatriculaCoche;
		
	}
	
	public JComboBox getTipoMotorCoche() {
	
		if (tipoMotorCoche.getItemCount() == 0){		
			tipoMotorCoche.addItem("Gasolina");
			tipoMotorCoche.addItem("Diesel");
			tipoMotorCoche.addItem("Bio-Diesel");
			tipoMotorCoche.addItem("Electricidad");
		}
		
		return tipoMotorCoche;
		
	}
	
	
	
	
	//Panel del Boton agregar
	
	public JPanel getPanelAddCocheBoton(){
		
		JPanel panelAddCocheBoton = new JPanel();
		JButton botonAnadir = new JButton("Modificar");
		panelAddCocheBoton.setLayout(new GridLayout(1,1));
		panelAddCocheBoton.add(botonAnadir);
		
		
		ActionListener listener = new ActionListener(){
			
			 public void actionPerformed(ActionEvent e) { 
				
				 //Recuperar datos Coche
				 
				if (concesionarioCoche.getSelectedIndex() > 0){
					if(campoMatriculaCoche.getSelectedIndex() > 0){
							 
					concesionario = concesionarioCoche.getSelectedItem().toString();
					matricula = campoMatriculaCoche.getSelectedItem().toString();
					marca = marcaCoche.getText().toString();
					modelo = modeloCoche.getText().toString();
					clase = claseCoche.getSelectedItem().toString();
					tipoMotor = tipoMotorCoche.getSelectedItem().toString();
							
					try {
							coche = (Coche) Class.forName("ucam.aplicacion."+clase).newInstance();
						} catch (InstantiationException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						} catch (IllegalAccessException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						} catch (ClassNotFoundException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
					
						coche.AtributosCoche(concesionario, matricula, marca, modelo, clase, tipoMotor);
					
						//Creamos el ArrayList que contendra las especificaciones de las distintas clases de coches
						
						listaEspecificaciones.removeAll(listaEspecificaciones);
						listaEspecificaciones.add(Integer.parseInt(panelEspecificaciones.especificacion1Coche.getText().toString()));
					
					
						coche.agregarAtributos(listaEspecificaciones); // Polimorfismo. Cada tipo de vehiculo implementa el metodo agregarAtributos, declarado en la clase Coche
						coche.guardarCoche(coche);				  // declarado como abstract.
						JOptionPane.showMessageDialog(null, marca+"  "+modelo+" ha sido modificado", "Modificar Coche", JOptionPane.INFORMATION_MESSAGE);					
					}
					else{
						 JOptionPane.showMessageDialog(null,"Matricula no valida", "Modificar Coche", JOptionPane.INFORMATION_MESSAGE);								 
					}
			      } 
				else{
					 JOptionPane.showMessageDialog(null,"Concesionario no valido", "Modificar Coche", JOptionPane.INFORMATION_MESSAGE);								 
					 }
			 }
		 };
   
       botonAnadir.addActionListener(listener);
					
		return panelAddCocheBoton;
		
	}

	@Override
	public void actionPerformed(ActionEvent actionEvent) {
		
			clase = claseCoche.getSelectedItem().toString(); 
			panelPrincipal.removeAll();
			panelPrincipal.setLayout(new BoxLayout(panelPrincipal,BoxLayout.PAGE_AXIS));
			panelPrincipal.add(getPanelLabel());
			panelPrincipal.add(getPanelAddCoche());
			panelPrincipal.add(getJpanelEspecificaciones());
			panelPrincipal.add(getPanelAddCocheBoton());
			panelPrincipal.updateUI();
					
			
	}
	
	//Este es el ActionListener del JComboBox de la matricula que nos saca al coche del Fichero y nos rellena los campos
	
	ActionListener listenerMatricula = new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent e) {
			if (campoMatriculaCoche.getSelectedIndex() > 0){
				
				String matricula = campoMatriculaCoche.getSelectedItem().toString();
				coche = gC.sacarDeFichero(matricula);
				concesionario = coche.getConcesionario();
				modelo = coche.getModelo();
				marca = coche.getMarca();
				clase = coche.getClase();
				tipoMotor = coche.getTipoMotor();
				listaEspecificaciones = coche.sacarAtributos();
			
				concesionarioCoche.setSelectedItem(concesionario);
				marcaCoche.setText(marca);
				modeloCoche.setText(modelo);
				tipoMotorCoche.setSelectedItem(tipoMotor);
				claseCoche.setSelectedItem(clase);
				panelEspecificaciones.especificacion1Coche.setText(listaEspecificaciones.get(0).toString());
			
			}
		}
	 
	};
	
	ActionListener listenerConcesionario = new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent e) {
			
			if (concesionarioCoche.getSelectedIndex() > 0){
			concesionario = concesionarioCoche.getSelectedItem().toString();
			}
		}
	 
	};
}
Lo pongo en dos partes porque no me dejaba ponerlo todo junto.
Yo deduzco que el fallo esta en esta clase en algun punto,porque cuando agrego un coche nuevo se pone todo en sus campos pero es cuando le doy a modificar y guardo es cuando se desencajan. Espero su ayuda y gracias en principio por todo.

Etiquetas: clase, string, aplicaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:39.