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

¿Cómo puedo enviar un número a un JTextField en otra clase en Java?

Estas en el tema de ¿Cómo puedo enviar un número a un JTextField en otra clase en Java? en el foro de Java en Foros del Web. En la clase 1 (Operaciones) hago esto: Ventana ventana = new Ventana(); ventana.Resultado(2*Math.PI*Math.pow(r… 2), V); Y en la clase 2 (Ventana) tengo esto: JTextField textovolumen ...
  #1 (permalink)  
Antiguo 07/11/2012, 10:37
Avatar de Ferkhis  
Fecha de Ingreso: mayo-2011
Ubicación: Medellín
Mensajes: 52
Antigüedad: 13 años, 5 meses
Puntos: 2
Pregunta ¿Cómo puedo enviar un número a un JTextField en otra clase en Java?

En la clase 1 (Operaciones) hago esto:

Ventana ventana = new Ventana();
ventana.Resultado(2*Math.PI*Math.pow(r… 2), V);

Y en la clase 2 (Ventana) tengo esto:

JTextField textovolumen = new JTextField("");
JTextField textollenado = new JTextField("");

public void Resultado(double Volumen, double Llenado)
{
textovolumen.setText(String.valueOf(…
textollenado.setText(String.valueOf(…
}

Pero cuando presiono el botón que envía los valores, el método Resultado si se ejecuta, pero los JTextFields no cambian... Alguien me puede decir por qué es? Muchas gracias!
  #2 (permalink)  
Antiguo 07/11/2012, 11:02
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: ¿Cómo puedo enviar un número a un JTextField en otra clase en Java?

Lo más probable es que hagas varios new de JTextField para almacenarlos en la misma variable ....

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 07/11/2012, 11:36
Avatar de Ferkhis  
Fecha de Ingreso: mayo-2011
Ubicación: Medellín
Mensajes: 52
Antigüedad: 13 años, 5 meses
Puntos: 2
Respuesta: ¿Cómo puedo enviar un número a un JTextField en otra clase en Java?

Cita:
Iniciado por chuidiang Ver Mensaje
Lo más probable es que hagas varios new de JTextField para almacenarlos en la misma variable ....

Se bueno.
Los campos y el método que crea la ventana están en la misma clase, pero los campos están declarados fuera del método de creación de la ventana. Lo que hago es llamar desde otra clase al método Resultado para que haga los cambios, pero simplemente no se hacen...
  #4 (permalink)  
Antiguo 07/11/2012, 11:53
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: ¿Cómo puedo enviar un número a un JTextField en otra clase en Java?

Hola:

¿Y cómo añades a la ventana los Jtextfield que están dentro de la clase que tiene el método Resultado?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 07/11/2012, 11:57
Avatar de Ferkhis  
Fecha de Ingreso: mayo-2011
Ubicación: Medellín
Mensajes: 52
Antigüedad: 13 años, 5 meses
Puntos: 2
Pregunta Respuesta: ¿Cómo puedo enviar un número a un JTextField en otra clase en Java?

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

¿Y cómo añades a la ventana los Jtextfield que están dentro de la clase que tiene el método Resultado?

Se bueno.
Hola, gracias.

Mira, resumidamente tengo esto en la clase donde esta metodo resultado y los campos:

public class Ventana
{

JFrame Ventana1;
JTextField textovolumen = new JTextField("");
JTextField textollenado = new JTextField("");


public void VentanaGUI()
{
...
}
public void Resultado(double Volumen, double Llenado)
{
textovolumen.setText(Double.toString(Volumen));
textollenado.setText(Double.toString(Llenado));
System.out.println(Double.toString(Volumen));
System.out.println(Double.toString(Llenado));
}
}


Y en la clase donde llamo al metodo:

public class Operaciones
{
public void CilindroHorizontal(double Longitud, double Radio, double Nivel, int Iteraciones)
{
...
Ventana ventana = new Ventana();
ventana.Resultado(2*Math.PI*Math.pow(r, 2), V);
}
}


Ojalá veas el error y me podás decir qué es. Gracias!
  #6 (permalink)  
Antiguo 07/11/2012, 13:08
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: ¿Cómo puedo enviar un número a un JTextField en otra clase en Java?

Hola:

pregunto por el trozo de código donde haces algo como ventana.getContentPane().add(textovolumen). ¿en qué clase está y cómo haces exactamente ese código?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 07/11/2012, 13:19
Avatar de Ferkhis  
Fecha de Ingreso: mayo-2011
Ubicación: Medellín
Mensajes: 52
Antigüedad: 13 años, 5 meses
Puntos: 2
Respuesta: ¿Cómo puedo enviar un número a un JTextField en otra clase en Java?

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

pregunto por el trozo de código donde haces algo como ventana.getContentPane().add(textovolumen). ¿en qué clase está y cómo haces exactamente ese código?

Se bueno.
No, no tengo ningún codigo así. Más bien mira las clases completas como son:

----------------------------------------------------------------------------------------------
CLASE QUE DISPARA LA INTERFAZ GRAFICA E INICIA EL PROGRAMA:


public class MainClass
{
public static void main(String[] args)
{
Ventana ventana1 = new Ventana();
ventana1.VentanaGUI();
}
}

----------------------------------------------------------------------------------------------
CLASE QUE GENERA LA INTERFAZ GRAFICA

import java.awt.Color;
import java.awt.event.*;
import javax.swing.*;

public class Ventana
{
JTextField textovolumen = new JTextField("");
JTextField textollenado = new JTextField("");
JFrame Ventana1;



public void Ventana1()
{
Ventana1 = new JFrame("TCVC [Tank Content Volume Calculator 1.0 by PuMa]");
Ventana1.setSize(640,480);
Ventana1.setResizable(false);
Ventana1.setLayout(null);
Ventana1.setLocationRelativeTo(null);

JLabel seleccion = new JLabel("Seleccione el tipo de tanque:");
seleccion.setSize(200,25);
seleccion.setVisible(true);
seleccion.setLocation(20,20);

final JComboBox TipoTanque = new JComboBox();
TipoTanque.setVisible(true);
TipoTanque.setSize(200,25);
TipoTanque.setLocation(20,40);
TipoTanque.addItem("Cilindro vertical");
TipoTanque.addItem("Cilindro horizontal");
TipoTanque.addItem("Tanque esférico");
TipoTanque.addItem("Tanque con corte salchichón");

JLabel seleccion2 = new JLabel("Ingrese los datos necesarios:");
seleccion2.setSize(200,20);
seleccion2.setVisible(true);
seleccion2.setLocation(20,70);

final JLabel radio = new JLabel("Radio:");
radio.setSize(50,20);
radio.setVisible(true);
radio.setLocation(20,90);

final JTextField textoradio = new JTextField("");
textoradio.setSize(50,20);
textoradio.setVisible(true);
textoradio.setLocation(70, 90);

final JLabel altura = new JLabel("Altura:");
altura.setSize(50,20);
altura.setVisible(true);
altura.setLocation(20,110);

final JTextField textoaltura = new JTextField("");
textoaltura.setSize(50,20);
textoaltura.setVisible(true);
textoaltura.setLocation(70, 110);

final JLabel profundidad = new JLabel("Profundidad:");
profundidad.setSize(80,20);
profundidad.setVisible(false);
profundidad.setLocation(130,90);

final JTextField textoprofundidad = new JTextField("");
textoprofundidad.setSize(50,20);
textoprofundidad.setVisible(false);
textoprofundidad.setLocation(210, 90);

final JLabel nivel = new JLabel("Nivel:");
nivel.setSize(40,20);
nivel.setVisible(true);
nivel.setLocation(170,110);

final JTextField textonivel = new JTextField("");
textonivel.setSize(50,20);
textonivel.setVisible(true);
textonivel.setLocation(210, 110);

JButton calcular = new JButton("Calcular volumen de tanque y nivel");
calcular.setSize(230,30);
calcular.setLocation(30, 150);
calcular.setVisible(true);
calcular.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
Operaciones calculos = new Operaciones();
if (TipoTanque.getSelectedItem() == "Cilindro horizontal")
calculos.CilindroHorizontal(Double.parseDouble(Str ing.valueOf(textoprofundidad.getText())), Double.parseDouble(String.valueOf(textoradio.getTe xt())), Double.parseDouble(String.valueOf(textonivel.getTe xt())), 10);
}
}
);

JPanel separador = new JPanel();
separador.setSize(250,2);
separador.setLocation(20, 200);
separador.setBackground(Color.black);

JLabel volumen = new JLabel("Volumen del Tanque:");
volumen.setSize(120,20);
volumen.setVisible(true);
volumen.setLocation(20,230);

textovolumen.setSize(50,20);
textollenado.setVisible(true);
textovolumen.setLocation(150, 230);

JLabel llenado = new JLabel("Volumen llenado:");
llenado.setSize(120,20);
llenado.setVisible(true);
llenado.setLocation(20,250);

textollenado.setSize(50,20);
textollenado.setVisible(true);
textollenado.setLocation(150, 250);

TipoTanque.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
if (TipoTanque.getSelectedItem() == "Cilindro vertical")
{
altura.setVisible(true);
textoaltura.setVisible(true);
profundidad.setVisible(false);
textoprofundidad.setVisible(false);
}
else
if (TipoTanque.getSelectedItem() == "Cilindro horizontal")
{
altura.setVisible(false);
textoaltura.setVisible(false);
profundidad.setVisible(true);
textoprofundidad.setVisible(true);
}
else
if (TipoTanque.getSelectedItem() == "Tanque esférico")
{
altura.setVisible(false);
textoaltura.setVisible(false);
profundidad.setVisible(false);
textoprofundidad.setVisible(false);
}
}
}
);

Ventana1.setVisible(true);

Ventana1.add(TipoTanque);
Ventana1.add(seleccion);
Ventana1.add(seleccion2);
Ventana1.add(radio);
Ventana1.add(textoradio);
Ventana1.add(altura);
Ventana1.add(textoaltura);
Ventana1.add(profundidad);
Ventana1.add(textoprofundidad);
Ventana1.add(nivel);
Ventana1.add(textonivel);
Ventana1.add(calcular);
Ventana1.add(separador);
Ventana1.add(volumen);
Ventana1.add(textovolumen);
Ventana1.add(llenado);
Ventana1.add(textollenado);

Ventana1.addWindowListener
(
new WindowAdapter()
{
public void windowClosing(WindowEvent evt)
{
System.exit(0);
}
}
);
}
public void Resultado(double Volumen, double Llenado)
{
this.textovolumen.setText(Double.toString(Volumen) );
this.textollenado.setText(Double.toString(Llenado) );
System.out.println(Double.toString(Volumen));
System.out.println(Double.toString(Llenado));
}
}

----------------------------------------------------------------------------------------------
CLASE QUE HACE LAS OPERACIONES DE INTEGRACION NECESARIAS:


public class Operaciones
{
public void CilindroHorizontal(double Longitud, double Radio, double Nivel, int Iteraciones)
{
double L = Longitud; //Profundidad del tanque
double r = Radio; //Radio
double l = Nivel; //Nivel del tanque

double a = r - l; //Límite inferior
double b = r; //Límite superior
int n = Iteraciones; //Iteraciones

double h = (b - a)/n; //Ancho de rectángulo
double fx = 0; //Alto del rectángulo
double A = 0; //Area
double V = A*L; //Volumen

for (int i = 0; i < n; i = i +1)
{
fx = 2*Math.pow((Math.pow(r, 2) - Math.pow(a + i*h, 2)), 0.5); //Ecuación de la circunferencia: x = a + i*h
A = A + fx;
}
A = A*h*2;
V = A*L; //Volumen = Area x Profundidad
Ventana ventana = new Ventana();
ventana.Resultado(2*Math.PI*Math.pow(r, 2), V);
}
}


----------------------------------------------------------------------------------------------

Pero como te dije, lo único relevante son los fragmentos de código que te mostré, ambos al final de las dos clases. No genera ningún error, los valores llegan al método Resultado, pero los cambios en los campos no se ejecutan.
  #8 (permalink)  
Antiguo 07/11/2012, 14:22
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: ¿Cómo puedo enviar un número a un JTextField en otra clase en Java?

Hola:

Deberías meter el código entre los tags de "code" correspondientes para que se vea formateado, así es difícil de seguir.

Veo que haces dos new Ventana(), uno en el main() y otro en el método CilindroHorizontal.

En el main llamas al método Ventana1() que es el construye todo y la hace visible.

En el método CilindorHorizontal no llamas a Ventana1(), por lo que la ventana en la que estás metiendo los resultados no está ni construida ni visible. Tendrías que pasarle al método CilondroHorizontal un parámetro más que sea la ventana donde tienes que mostrar los resultados para no tener que hacer el new. O bien pasar Ventana en el constructor de Operaciones y guardártelo en un atributo de Operaciones, de forma que CilindroHorizontal() pueda usarlo sin hacer otro new. O la opción más elegante, el método CilindroHozizontal debería devolver los resultados en el return (posiblemente una clase Resultado con los dos valores como atributos) y ser la misma clase Ventana la que los recoja y los meta en los textfield.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #9 (permalink)  
Antiguo 07/11/2012, 14:40
Avatar de Ferkhis  
Fecha de Ingreso: mayo-2011
Ubicación: Medellín
Mensajes: 52
Antigüedad: 13 años, 5 meses
Puntos: 2
Respuesta: ¿Cómo puedo enviar un número a un JTextField en otra clase en Java?

Muchas gracias por la explicación, entiendo lo que sucede. Veré cuál es la mejor forma de solucionar esto ya que entiendo qué es lo que sucede.
  #10 (permalink)  
Antiguo 07/11/2012, 18:54
Avatar de Ferkhis  
Fecha de Ingreso: mayo-2011
Ubicación: Medellín
Mensajes: 52
Antigüedad: 13 años, 5 meses
Puntos: 2
Respuesta: ¿Cómo puedo enviar un número a un JTextField en otra clase en Java?

Mmmmm entiendo lo que me sugieres que haga, pero cuando voy a pasar la ventana como parámetro, no sé que pasar en la llamada a CilindroHorizontal()... pondría el parámetro Ventana, Ventana1, ó VentanaGUI() :S... no sé bien qué mandarle...
  #11 (permalink)  
Antiguo 07/11/2012, 21:57
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: ¿Cómo puedo enviar un número a un JTextField en otra clase en Java?

En el método CilindroHorizontal el parámetro debe ser de tipo "Ventana".

Cuando llames sl método CilindroHorizontal debes pasarle un Ventana.this o this.Ventana (no recuerdo). Te explico esto último.

Como es la clase Ventana la que llama al método CilindroHorizontal(), deberías pasarle "this" como parámetro. El problema es que la llamada la estás haciendo dentro de un ActionListener, por lo que java considera ahí que "this" es la clase ActionListener. La forma de referencia a Ventana desde el ActionListener que está creado dentro de la clase Ventana creo que es "this.Ventana" o "Ventana.this" (como te digo, no recuerdo cual de las dos es).

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #12 (permalink)  
Antiguo 10/11/2012, 18:06
Avatar de Ferkhis  
Fecha de Ingreso: mayo-2011
Ubicación: Medellín
Mensajes: 52
Antigüedad: 13 años, 5 meses
Puntos: 2
Respuesta: ¿Cómo puedo enviar un número a un JTextField en otra clase en Java?

Cita:
Iniciado por chuidiang Ver Mensaje
En el método CilindroHorizontal el parámetro debe ser de tipo "Ventana".

Cuando llames sl método CilindroHorizontal debes pasarle un Ventana.this o this.Ventana (no recuerdo). Te explico esto último.

Como es la clase Ventana la que llama al método CilindroHorizontal(), deberías pasarle "this" como parámetro. El problema es que la llamada la estás haciendo dentro de un ActionListener, por lo que java considera ahí que "this" es la clase ActionListener. La forma de referencia a Ventana desde el ActionListener que está creado dentro de la clase Ventana creo que es "this.Ventana" o "Ventana.this" (como te digo, no recuerdo cual de las dos es).

Se bueno.
Listo! Lo he hecho tal cual me dijiste y ya funciona excelente, muchas gracias Chuidiang, me has ayudado bastante!

Etiquetas: contenido, modificar
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 13:17.