2017-06-07 17 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; 

私は別のクラスのJTextAreaに文章を追加しようとしています。Javaの別のクラスからプライベートTextAreaに追加する

+1

サブクラスは 'private'フィールドにアクセスすることはできず、' protected'とマークするかプライベートステートの突然変異のための非プライベートメソッドを提供します –

+0

デザイン面では、UIをバックエンドから拡張しようとしているのではないでしょうか? UIからメソッド/ etcにアクセスする。あなたはこれらの2つのクラスを分けて(バックエンドがGUIになっているので)、もう一方のコンストラクタの中の1つへの参照を渡してください。 – Rogue

答えて

0

質問を投稿した当初私のコメントで述べたように、サブクラスがアクセスできるか、または突然変異のためのメソッドを提供できるように、privateフィールドをprotectedとしてマークする必要があります。

カプセル化を保護するので、第2のアプローチが優れています。

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

クラスハンドルを持つと、状態を変更する責任があります。非公開にしないでください。

* P.S。ボット、名前が親クラスで定義されている場合は、文字列の変形部分を渡して親メソッドにパラメータとして渡すことができます(もちろん、メソッドのシグネチャを変更して複数の文字列を受け入れる必要があります) definationでは、要件ごとに文字列のマージを処理できます。

+1

ありがとうたくさんの男。ああええ、ちょうど小さなタイプミス私はそれがtxtでなければならないと思うtxt.Respondええ応答しますか? –

+0

はい、編集した場合、問題を解決するのに役立ちましたら、回答を承認済みとしてマークすることができます。 –

0

親の変数privateにアクセスすることはできません。変数txtRespondprotectedを作成するか、その変数のゲッターを作成します。

+0

問題は、私がJFrameを使用していて、 "private javax.swing.JTextArea txtRespond ; "それは問題です。うーん –

関連する問題