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

Problema al llamar a un método de otra clase

Estas en el tema de Problema al llamar a un método de otra clase en el foro de Java en Foros del Web. ¡Hola! Tengo un problema al llamar a un método de otro clase. He creado una clase llamada VentanaAlumno que es una ventana, una clase Alumno ...
  #1 (permalink)  
Antiguo 10/01/2009, 09:38
 
Fecha de Ingreso: junio-2008
Ubicación: secreto
Mensajes: 65
Antigüedad: 15 años, 11 meses
Puntos: 2
Exclamación Problema al llamar a un método de otra clase

¡Hola!

Tengo un problema al llamar a un método de otro clase. He creado una clase llamada VentanaAlumno que es una ventana, una clase Alumno (que es una estructura de datos)y otra clase ControlAlumno (que es la que se comunicaría con la base de datos).

El problema me surge cuando intento llamar desde VentanaAlumno al método GrabarAlumno (que se encuentra en ControlAlumno).

Lo que hago es esto:

Código:
ControlAlumno control;
.
.
control.GrabarAlumno();

No creo que eso último esté bien porque aunque supongo que la información le llega a GrabarAlumno, luego no puedo imprimir esa información, ni siquiera puedo hacer un alu.toString(); (alu es un objeto de la clase Alumno).


Agradecería que me dijeseis donde estoy metiendo la pata... GRACIAS!!


Aquí dejo el código completo:

Ventana Alumno
Código:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class VentanaAlumno extends JFrame implements WindowListener{
	Container panel;
	JButton bSalir,bGrabar,bBorrar;
	JTextField tNombre, tApellidos, tNumero;
	JLabel lNombre, lApellidos, lNumero;
	ControlAlumno control;
	
	public VentanaAlumno(String titulo){  //**CONSTRUCTOR DE LA VENTANA**//
	super(titulo);
	panel=getContentPane();
	setSize(280,175);
	panel.setLayout(new FlowLayout());
	
	bSalir=new JButton("Salir"); //instancio los componentes
	bGrabar=new JButton("Grabar");
	bBorrar=new JButton("Borrar");
	tNombre=new JTextField(15);
	tApellidos=new JTextField(15);
	tNumero=new JTextField(15);
	lNombre=new JLabel("Nombre");
	lApellidos=new JLabel("Apellido");
	lNumero=new JLabel("Numero");
	
	bSalir.setSize(40,20);  //establezco propiedades de componentes
	bGrabar.setSize(40,20);
	bBorrar.setSize(40,20);
	tNombre.setSize(40,20);
	tApellidos.setSize(40,20);
	tNumero.setSize(40,20);
	lNombre.setSize(40,20);
	lApellidos.setSize(40,20);
	lNumero.setSize(40,20);
	
	panel.add(lNumero); //añado al panel los componentes
	panel.add(tNumero);
	panel.add(lNombre);
	panel.add(tNombre);
	panel.add(lApellidos);
	panel.add(tApellidos);
	panel.add(bGrabar);
	panel.add(bSalir);
	panel.add(bBorrar);
	panel.add(lConsola);
	panel.add(tConsola);
	
	bSalir.addActionListener(new escuchaSalir()); 
	bBorrar.addActionListener(new escuchaBorrar());
	bGrabar.addActionListener(new escuchaGrabar());
	this.addWindowListener(this);

	setVisible(true);
	}
	
//	**CLASES DE ESCUCHA DE EVENTOS**//    
	
	class escuchaSalir implements ActionListener{
		public void actionPerformed(ActionEvent e) {System.exit(0);}
	}
	
	class escuchaGrabar implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			tConsola.setText("Botón pulsado");
			try{
				control.GrabarAlumno(new Alumno(tNumero.getText(),tNombre.getText(),tApellidos.getText()));
			}catch(Exception evento){tConsola.setText("Imposible grabar: "+evento.getStackTrace());}
		}
	}
	
	class escuchaBorrar implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			tNumero.setText("");
			tApellidos.setText("");
			tNombre.setText("");
			tConsola.setText("Formulario borrado");
		}
	}
	
	public void windowOpened(WindowEvent arg0) {System.out.println("Ventana abierta");}
	public void windowClosing(WindowEvent arg0) {System.out.println("Ventana cerrada");System.exit(0);}
	public void windowClosed(WindowEvent arg0) {}
	public void windowIconified(WindowEvent arg0) {System.out.println("Minimizado");}
	public void windowDeiconified(WindowEvent arg0) {System.out.println("Maximizado");}
	public void windowActivated(WindowEvent arg0) {System.out.println("Ventana activada");}
	public void windowDeactivated(WindowEvent arg0) {System.out.println("Ventana desactivada");}
	
	
	public static void main(String[] args) {
		new VentanaAlumno("Insertar nuevo Alumno");
	}
}

ControlAlumno
Código:
public class ControlAlumno {
	Alumno alu;
	
	public ControlAlumno(Alumno alu){
		this.alu=alu;
	}
	
	public void GrabarAlumno(Alumno Alu){
		System.out.println("Alumno grabado en la base de datos");
		System.out.println(alu.toString());
	}
	
	public static void main(String[] args) {
	}
}
  #2 (permalink)  
Antiguo 10/01/2009, 14:30
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Problema al llamar a un método de otra clase

Hola:

Tienes varias opciones.

Puede guardarte Alumno en algún sitio, en vez hacer el new directamente, así podras seguir usándolo

Código:
	class escuchaGrabar implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			tConsola.setText("Botón pulsado");
			try{
                                Alumno alu = new Alumno(tNumero.getText(), 
                                      tNombre.getText(),
                                      tApellidos.getText());
				control.GrabarAlumno(alu);
                                // Aquí puedes hacer cosas con alu.
			}catch(Exception evento){tConsola.setText("Imposible grabar: "+evento.getStackTrace());}
		}
	}
Otra opción es poner métodos a ControlAlumno para que haga cosas con Alumno, puesto que él sí se lo guarda. O símplmente ponerle un método getAlumno(), para obtener el Alumno y así poder hacerle cosas.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 11/01/2009, 06:38
 
Fecha de Ingreso: junio-2008
Ubicación: secreto
Mensajes: 65
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: Problema al llamar a un método de otra clase

Hola! he intentado hacer lo que me comentas y no funciona, siempre salta el catch, no consigo hacer que funcione el toString(), ni enviar los datos a la otra clase...

EDITO: Por lo que estoy viendo en mi ejemplo, el fallo está en la llamada control.GrabarAlumno(alu);

Última edición por unusuariosecreto; 11/01/2009 a las 06:52 Razón: añadir informacion
  #4 (permalink)  
Antiguo 11/01/2009, 23:19
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años
Puntos: 15
Respuesta: Problema al llamar a un método de otra clase

Donde instancias esta clase:

ControlAlumno control;

No veo que en ningun lado hagas un

control = new ControlAlumno();


En todo caso si quieres llamar a un metodo de una clase sin instanciarlo, el metodo debe ser static
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
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:17.