Actualización de un JLabel [Resuelto]

ः Anthid:

Tengo una interfaz gráfica de usuario simple que tiene un JTextField que espera a que el usuario pueda poner en algo. Después se hace clic en un botón, el programa:

  1. lee la entrada, lo guarda en una variable de cadena;
  2. se abre una nueva interfaz gráfica de usuario (que está en un archivo de clase independiente), que contiene un JLabel vacío, y pasa la variable de cadena a la misma, cambiando el texto JLabel a ella.

El problema es que no importa cuánto lo intente volver a configurar el código, añadiendo cosas como pintar (), revalidate (), etc., el JLabel en el segundo estancias GUI vacía. El uso de un System.out.println (jLabel.getText ()) revela que el valor del texto es, en efecto cambió, pero no se muestra. ¿Cómo puedo "refrescar" este JLabel, por lo que mostraría lo que deseo? Soy consciente de que podría añadir un evento, aunque no quiero que el usuario haga clic en nada para actualizar la interfaz gráfica de usuario, los valores deben estar allí, ya que está iniciado. He leído a través de varios mensajes similares, pero se encontró que las soluciones no funcionan para mí.

El código de evento de clic de botón de la primera interfaz gráfica de usuario:

private void sbuttonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    errortext.setText("");
    Search = sfield.getText();
    Transl = hashes.find(Search);
    if (Transl.equals("0")) errortext.setText("Word not found in database.");
    else {
        ws.run(Search, Transl); // <- this opens the second GUI, with two String parameters I want to display in the second GUI;
    }
}

El código de la segunda interfaz gráfica de usuario (activeword y la traducción son los JLabels que me están dando problemas.):

public void run(String Search, String Transl) {
    WordScreen init = new WordScreen(); //initialise the second GUI;
    init.setVisible(true);
    activeword.setText(Search); 
    translation.setText(Transl);
}

Cualquier respuesta es muy bienvenida! Por favor, pregunte conmigo para obtener más información sobre el código si es necesario, me aseguraré de responder lo más pronto posible!

Aerodeslizador completa de anguilas:

La mejor solución: cambiar el constructor de WordScreen para aceptar las dos cadenas de interés:

De esto:

public void run(String Search, String Transl) {
    WordScreen init = new WordScreen(); //initialise the second GUI;
    init.setVisible(true);
    activeword.setText(Search); 
    translation.setText(Transl);
}

a esto:

public void run(String search, String transl) {
    WordScreen init = new WordScreen(search, transl); 
    init.setVisible(true);
}

A continuación, en el constructor WordScreen utilizar esas cadenas cuando sea necesario:

public WordScreen(String search, String transl) {
    JLabel someLabel = new JLabel(search);
    JLabel otherLabel = new JLabel(transl);

    // put them where needed
}

Tenga en cuenta que no puedo crear una respuesta completa sin su publicación un decente MRE


Dicho sea de paso, tendrá que aprender y utilizar las convenciones de nombres de Java . Todos los nombres de las variables deben comenzar con una letra más baja, mientras que los nombres de clase con una letra mayúscula. El aprendizaje de este y después de esto nos permitirá comprender mejor su código, y nos permitirá entender mejor el código de los demás.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=281996&siteId=1
Recomendado
Clasificación