AYUDA URGENTE Actualizar (Insertar Texto) En Un TextArea desde Otra Clase

Bueno, acudo a ustedes con la siguiente duda, el caso es que termine un ensamblador, de un proyecto que me dejaron, en la escuela, pero el maestro me pidio que le pusiera Interfaz gráfica, de tal forma que la estructura del pragrama quedo, de la siguiente manera:

-7 clases, para la logica del programa
-1 clase para la Interfaz de Usuario

El caso, es que cuándo, mando a llamar mi metodo que se encarga de actulizar mi TextArea de la Interfaz, no me actualiza nada, a que creen que se deba.

-Desde las 7 clases hago esto:

Invoco a la Ventana en la primera clase, esta solo se llama un vez, en todas las 7 clases
INTERFACE_HC12 Interfaz = new INTERFACE_HC12();
Interfaz.Inicializar_Ventana();
Interfaz.setVisible(true);

Se manda a llamar a la Actualizacion del TetxArea, esta se manda a llamar en las 7 clases
INTERFACE_HC12 Interfaz = new INTERFACE_HC12();
Interfaz.Actualizacion_Pantalla("NUM_LINEA");

La Funcion que actualzia el text area es así, esta dentro de la clase de la Interfza de Usuario:

public void Actualizacion_Pantalla(String mensaje)
{
txtsalida.setFont(new java.awt.Font("Courier", 1, 14));
txtsalida.append(mensaje);
txtsalida.setText("");
txtsalida.setCaretPosition(mensaje.length());
}

En otras palabras, lo que quiero hacer, es actualizar Un textArea que se encuentra en la Clase INTERFACE_HC12, desde las otras 7 clases que corresponden la lógica del programa, es decir actualizar un TextArea desde Otra clase.

Espero me puedan Ayudar Gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

RE

Tienes que usar la misma instancia en todas las clases, veo que en cada clase creas una instancia nueva de INTERFAZ_HC12

Entonces, tengo que Pasar la

Entonces, tengo que Pasar la Clase Interfza HC12 a Una sola Clase, para que al Instanciarla se haga todo desde la misma Clase, o como podría hacer lo que me propones

Una duda, éntonces como mando

Una duda, éntonces como mando la Instancia de parametro

COmo uso la misma Instancia

COmo uso la misma Instancia en todas las clases

Imagen de CharlieCorner

Yo lo que haría

Para evitarme problemas es dejar la estructura que estás poniendo así. Ahora, en la clase donde se generará el mensaje que se pondrá el TextArea, crear una variable de instancia que haga una referencia al objeto TextArea original. De esa manera puedes mover todo el objeto TextArea en la clase de tu lógica, pero como hace una referencia al objeto que ya debiste haber creado en la clase de la interfaz gráfica, todo se actualizaría. No estoy seguro de si me expliqué...

Básicamente, lo que harías sería hacer un constructor que reciba como parámetro un objeto TextArea y crear la referencia, a grandes rasgos, algo así:

<pre>
/** Ésta sería la clase de tu lógica
 ** donde se generaría el mensaje que
 ** se pondrá en el TextArea de tu GUI
 **/

  public class tuLogica {
  private TextArea objetoTextArea;     // No se inicializa para dejar pendiente la creación
                                                     //  de la referencia más adelante
  //Constructor
     public tuLogica (TextArea laAreaOriginal) {
          objetoTextArea = laAreaOriginal;
     }
 }
</pre>

Pasar la referencia ya depende de la clase donde creas un objeto de la clase de tu lógica, si es que lo haces.

No sé si me expliqué, sino expónme tus dudas y te las resuelvo.

También, como observación, aguas con el método append() y luego aplicarle un setText(""), porque el último borraría todo lo que ya tenías en el TextArea, incluído lo que acababas de poner con append(), checa la documentación de la clase TextArea para que te quede más claro.

Pasale la referencia

pasale la referencia a las clases que la uses


class ClaseA{

...

    ClaseB claseB = new ClaseB();
    claseB.setInstanceOfClaseA(this);

...
}

y asi tienes la mismita instancia de ClaseA en ClaseB ... asi le harias hasta si gustas hasta ClaseZ y las modificaciones que le hagas impactaria directamente a ClaseA y como En ClaseB... ClaseZ hacen referencia a ClaseA 'pos tambien tendran la modificacion

(La otra es que uses singleton pero esos singleton deben residir en un contenedor y bueno, eso depende tu aplicacion @see SpringFramework)

Éntonces pasando las

Éntonces pasando las Instancias, ya debería de funcionar verdad o en su defecto creando el constructor, bueno voy a intentar las dos formas y le cuento que paso

Bueno con respecto a la

Bueno con respecto a la última respuesta, me marca error al compilar

ENSAMBLADOR asm = new ENSAMBLADOR();
ENSAMBLADOR.setInstanceOfJFRAME(this);

Bueno, lo que estoy haciendo

Bueno, lo que estoy haciendo es que elimine la clase de Interfaz de Usuario y la pase a donde Inicia el Ensamblado, la Primera de las 7 clases, intente lo del constructor pero no le entiendo muy bien:

-Osea declaro el contnstructor que recibe e iniciializa el text area, este constructor esta dentro de la misma clase de la interfaz y ahora que

Otra duda, conrespecto a la

Otra duda, conrespecto a la Instancia, como se haría con la nueva estructura que tengo:

1. Interfaz Gráfica que estra en el mismo lado donde inicia el procesa de Ensamblado
2. 6 clases auxiliares que va a enviar texto, para actualizar el TextBox

El main de la clase esta de la siguiente Manera:

JFrame Interfaz = new JFrame("ENSAMBLADOR HC12");
Interfaz.setSize(600,500);
Container panel = Interfaz.getContentPane();
panel.add(new ENSAMBLADOR());
Interfaz.setVisible(true);

La funcion done comienza todo:

if(boton == cmdensamblar)
{
Inicio_Ensamblado(ruta_archivo);
}

Ya me imprime la primera parte, pero como le aria para que las demas clases, actualizaran el TextARea

public void Actualizacion_Pantalla(String mensaje)
{
txtsalida.setFont(new java.awt.Font("Courier", 1, 14));
txtsalida.append(mensaje);
txtsalida.setCaretPosition(mensaje.length());
}

Intente hacer lo de las

Intente hacer lo de las Intsncias pero me marca error el complilador por las referencias estaticas

Resuelto

Resuelto, deje al estructutra del Código:

1. Interfaz Gráfica que estra en el mismo lado donde inicia el procesa de Ensamblado
2. 6 clases auxiliares que va a enviar texto, para actualizar el TextBox

Declare el textArea como Stratic, y desde todas las clases lo mando a referenciar como:

ENSAMBLADOR.txtsalida.append("ESTO ES UNA PRUEBA");

Y se declaro como:

static TextArea txtsalida = new TextArea("Información del Código Generado:\n");

Gracias por sus sugerencias, me ayudaron mucho, con lo de referenciar la misma Instancia

Mejoras

Otra manera mas elegante es Crear una clase por ejemplo Monitor, esta clase internamente debe tener un textarea, o cualquier componente que que desees, seria recomendable que extienda a JPanel, debe proveer un metodo para poder imprimir el mensaje que desees, ahora bien, este monitor sera un Singleton, de esta manera puedes referenciarlo donde lo necesites con la seguridad que siempre sera la misma instancia.

para referencialo solo basta hacer:

Monitor monitor = Monitor.getInstance();

monitor.printMessaje();

//por que un Jpanel?, por que lo puedes agregar a un jframe, un jdialog, o a otro jpanne, por ejemplo si lo quieres agregar a un jframe

JFrame frame = new JFrame("sadas");
frame.getContentPane().add(Monitor.getInstance());

Imagen de jtepetate

Cómo actualizar un textarea

Tengo un problema similar al de Marcos Roberto. Estoy intentando actualizar el contenido de un area de texto en un frame desde otra clase, pero no lo hace. Lo que quiero es ir mostrando algunos mensajes en el area de texto, para que el usuario los pueada ver en tiempo real.

Intenté entender lo que hizo Marcos, pero no comprendí muy bien cómo le hizo en la Interfaz grafica. La parte de la lógica sí, pero ya lo demás no.

Yo estoy haciendo algo así: en la interfaz grafica

public void mostrarMensaje(String mensaje){

areaTexto.append(mensaje);

}

el mensaje viene de otra clase...espero alguien me pueda explicar mas a detalle esto...

@jtepetate Revisa esto:

@jtepetate Revisa esto:

http://stackoverflow.com/questions/342990/create-java-console-inside-the...

Quizá sería mejor que crearas un post nuevo.