Mise à jour d'un JLabel

ः Anthid:

J'ai une interface graphique simple qui a un JTextField qui attend que l'utilisateur de mettre quelque chose. Après un bouton est cliqué, le programme:

  1. lit l'entrée, il enregistre dans une variable String;
  2. ouvre une nouvelle interface graphique (qui se trouve dans un fichier de classe séparée), qui contient un JLabel vide, et passe la variable chaîne à elle, modifier le texte JLabel à lui.

Le problème est que peu importe à quel point je tente de reconfigurer le code, ajouter des choses comme repeindre (), revalidate (), etc., JLabel dans le deuxième séjour de l'interface graphique vide. L'utilisation d'un System.out.println (jLabel.getText ()) révèle que la valeur du texte est en effet changé, mais pas affiché. Comment puis-je « rafraîchir » ce JLabel, il montrerait ce que je le souhaite? Je suis conscient que je pourrais ajouter un événement, bien que je ne veux pas que l'utilisateur de cliquer sur quoi que ce soit pour rafraîchir l'interface graphique, les valeurs doivent être là comme il est initié. J'ai lu creux plusieurs postes similaires, mais a constaté que les solutions ne fonctionnent pas pour moi.

Le code de premier événement click bouton GUI:

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;
    }
}

Le code de la deuxième GUI (activeword et de traduction sont les JLabels qui me donnent du mal.):

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

Toute réponse est la bienvenue! S'il vous plaît me demander plus d'informations sur le code si nécessaire, je veillerai à répondre le plus rapidement possible!

Aéroglisseur Full Of Eels:

La meilleure solution: changer le constructeur de WordScreen d'accepter les deux chaînes d'intérêt:

De ceci:

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

pour ça:

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

Puis dans le constructeur de WordScreen utiliser les chaînes en cas de besoin:

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

    // put them where needed
}

Notez que je ne peux pas créer une réponse complète sans votre affichage une vie décente MRE


En aparté, vous voulez apprendre et utiliser les conventions de nommage Java . Les noms de variables doivent tous commencer par une lettre minuscule tandis que les noms de classe avec une majuscule. Apprendre et ce qui suit cela nous permettra de mieux comprendre votre code, et vous permettra de mieux comprendre le code des autres.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=286064&siteId=1
conseillé
Classement