Hacer referencia a un método de un archivo Java diferente

Soy nuevo en la programación de Java y me enfrento a un problema (muy probablemente) fácil que parece que no puedo transmitir ni comprender.

Tengo tres archivos java diferentes, uno donde creo una interfaz (SimulatorGui.java), otro donde estoy creando un panel para usar en el jTabbedPanel creado en la interfaz (CollisionPanel.java - CollisionPanel class) y un tercero, donde ejecute un código que creará la salida necesaria (Collision.java - Colision class).

En el método principal Collision.java, estoy haciendo lo siguiente:

  public static void main (String[] args) {

    //<editor-fold defaultstate="collapsed" desc="Simulation start procedures">
    Tally statC = new Tally ("Statistics on collisions");
    Collision col = new Collision (100, 50);
    col.simulateRuns (100, new MRG32k3a(), statC);
    //</editor-fold>


    new SimulatorGUI().setVisible(true);
    CollisionPanel update = new CollisionPanel();
    update.updatepanel();

El primer bloque, creará la salida deseada. ¡Entonces quiero enviar esa salida al panel de actualización! No estoy pasando ningún argumento al método ya que todavía estoy tratando de depurar esto. El método updatepanel se crea en el archivo CollisionPanel de la siguiente manera:

public void updatepanel(){
    System.out.println ("debug");
    jTextArea1.setText("update\n");
}

Lo que sucede entonces es que cuando ejecuto el archivo Collision.java generará el texto de "depuración" pero no establecerá el texto en jTextArea1 (agregar no funciona también). Luego creé un botón para intentarlo y en ese caso funciona. En CollisionPanel.java:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    updatepanel();
}

Esto hace el truco! He buscado e intentado diferentes cosas, pero parece que no puedo entender por qué esto no funciona.

Gracias de antemano por su ayuda, ¡espero haber aclarado el problema!

Respuesta 1

De acuerdo, creo que eventualmente tengo el problema, y ​​es debido al IDE, ves en tu método principal que inicias un nuevo CollisionPanel, que está mal, netbeans ya ha agregado e iniciado ese panel en el SimulatorGUI, así que ahora lo que necesitas hacer es agregar un método get en el SimulatorGUIpara obtener el panel iniciado, luego llamar al método de actualización en ese panel.

Entonces agregue esto a SimulatorGUI:

public CollisionPanel getCollisionPanel1() {
    return collisionPanel1;
}

reemplace su updatePanel()método anterior con:

 void updatepanel(String str) {
            System.out.println ("debug");
            jTextArea1.setText(str);
         //   jTextArea1.revalidate();
            jLabel1.setText("test");
        }

después de eso, cambia tu main también:

            SimulatorGUI simulatorGUI = new SimulatorGUI();
            simulatorGUI.setVisible(true);
            CollisionPanel cp=simulatorGUI.getCollisionPanel1();
            cp.updatepanel("Hi");

y no olvide eliminar la updatePanel()llamada al método anterior de su CollisionPanelconstructor, porque ahora simplemente puede llamar cp.updatePanel("text here");a su SimulatorGUIclase en lugar de llamarla solo en el constructor.

Espero que esto sea fácil de entender, si no estás seguro, házmelo saber

Respuesta: 2

Quiero preguntar sobre la secuencia correcta "lectura" de esta expresión lógica: (verdadero && falso | verdadero) Pensé que devuelve falso, debido a la primera expresión - verdadero && falso Pero ...

Actualmente estoy trabajando en un proyecto sobre cálculos. He realizado la parte principal de mi proyecto, también he integrado la función SVN Commit en mi código (usando el archivo .ini para leer la dirección específica, etc.) ...

Tengo un programa que crea JButtons que luego se agregan a un JPanel con un BoxLayout que está configurado para colocarlos verticalmente. Ocasionalmente, el primer botón se elimina intencionalmente del JPanel. ...

Quiero saber qué es la complejidad de bits y el tiempo del operador en Java y cómo reducirla utilizando métodos alternativos, si los hay. ¡¡Gracias por adelantado!!