2017-06-07 2 views
0
class Backend extends UI { 
    // some code 
    void start() { 
     txtRespond.append(Bot + ": hello, " + Name + "\n"); /* have a problem accessing txtRespond */ 

public class UI extends javax.swing.JFrame { 
    // some code 
    private javax.swing.JTextArea txtRespond; 

Je suis en train d'ajouter des phrases à mon JTextArea d'une autre classe.à un TextArea Adjonction privé d'une autre classe en Java

+1

Les sous-classes ne peuvent pas accéder aux champs 'private', les marquer' protected' ou fournir des méthodes non privées de mutation des états privés –

+0

Sur le plan du design, je doute que vous ayez l'intention d'étendre l'interface utilisateur de Backend. pour accéder aux méthodes/etc de l'interface utilisateur. Vous devriez séparer ces deux classes (comme Backend est maintenant aussi une interface graphique) et passer une référence à l'un d'eux dans le constructeur de l'autre – Rogue

Répondre

0

Comme je l'ai mentionné dans mon commentaire très initialement lorsque vous avez posté la question, vous devez avoir le champ privé marqué comme protégé afin que la sous-classe puisse y accéder ou fournir des méthodes de mutation.

La deuxième approche est meilleure car elle protège l'encapsulation.

public class UI extends javax.swing.JFrame { 
    // some code 
    private javax.swing.JTextArea txtRespond; 

    protected void appendResponse(String response){ 
     txtRespond.append(response); 
    } 

    // your other methods and code if you have. 
} 


class Backend extends UI { 
    // some code 
    void start() { 
     appendResponse(Bot + ": hello, " + Name + "\n"); 
    } 
} 

Avoir une classe assumer la responsabilité de modifier son état est une bonne pratique. Nous devrions éviter de les rendre non privés.

* P.S. si bot, Name sont définis dans la classe parente alors vous pouvez juste passer la partie variant de la chaîne et la passer à la méthode parent en tant que paramètres (bien sûr vous devez modifier la signature de la méthode pour accepter plus d'une chaîne) et dans la méthode définition vous pouvez gérer la fusion des chaînes selon les exigences.

+1

Merci beaucoup l'homme. Oh ouais ps juste une petite faute de frappe je pense qu'il devrait être txtRespond pas txt.Respond hein? –

+0

oui, édité, vous pouvez marquer la réponse comme acceptée si elle a été utile pour résoudre votre problème. –

0

Vous ne pouvez pas accéder à la variable private parent, créez la variable txtRespondprotected ou créez un getter pour cette variable.

+0

Le problème est que j'ai utilisé JFrame et je ne peux pas éditer le "private javax.swing.JTextArea txtRespond ". C'est le problème. Hmmm –