2017-02-23 6 views
0

私はガイドラインと呼ばれる独自のクラスを作った。これは、ユーザーが特定のボタンを押すと、新しいウィンドウに表示したいテキストを含む。Java - オブジェクトを自分のクラスからメインクラスの文字列に変換するにはどうすればよいですか?

public class Guidelines { 

    public Guidelines(String buttonName){ 
     guidelines(buttonName); 
    } 

    private String guidelines(String buttonName){ 
     String content = ""; 
     if (buttonName.equals("norman")) 
      content = "Norman is the man!"; 
     if (buttonName.equals("nielsen")) 
      content = "Nielsen is the best!"; 
     if (buttonName.equals("fitt")) 
      content = "Fitt rocks!"; 
     return content; 
    } 
} 

しかし、私はこのように私のメインクラスでこのクラスを呼び出すとき:

Guidelines content = new Guidelines("norman"); 
JTextArea textArea = new JTextArea(String.valueOf(content)); 

私は"Norman is the man!"のような文字列を取得しますが、[email protected]のようなものはありません。オブジェクトを文字列に変換する際に問題があると思います。どのように文字列を取得できますか?

+3

のvalueOfを使用する必要を呼び出すことはできません、プラスコンテンツがすでに文字列です。これはあなたのメソッドをpublicにすることでうまくいくはずです:JTextArea textArea = new JTextArea(Guidelines.guidelines(buttonName)); –

+0

@JeanHenry実際に 'content'には' Guidelines'があります( 'valueOf'が必要で、' Guidelines'オブジェクトの 'toString'が呼び出されます)。これは、文字列である 'guidelines'メソッド内の' content'ローカル変数です。しかし、混乱を避けるために、2つのうちの1つをより良い名前にする必要があります。 – SantiBailors

+0

'toString()'メソッドをオーバーライドするだけで、 'guidelines()'メソッドで生成された文字列が返されます。 –

答えて

1

あなたは何をしているか、あなたのコードによると、あなたはコンストラクタを持つクラスを定義しているということですGuidelinesは文字列値をとり、guidelinesというメソッドがあり、Stringを返し、文字列値を取ります。あなたがオブジェクト/インスタンスに

Guidelines content = new Guidelines("norman"); 

を作成しているとき

は、今ではあなたのためのガイドラインオブジェクトを作成し、ノーマンを渡すことによって、メソッドguidelines(String buttonName)を呼び出します。今はコンストラクタが呼び出されており、コンストラクタがメソッドを呼び出していますが、コンストラクタが何も返していません。だから、いつでも、あなたは参照変数は、我々の場合のコンテンツ内のオブジェクトへの参照を保持している

Guidelines content = new Guidelines("norman"); 

を書いています。参照変数を印刷すると、その特定のオブジェクトのhashCodeが表示されます。その場合は[email protected]です。

このようなメソッドguidelines(String buttonName)の呼び出しを実行するだけで、メソッドをpublicとして宣言する必要があります。その後、

String buttonName = content.guidelines("norman); 

JTextArea textArea = new JTextArea(buttonName); 

変数buttonNameを渡したり、直接

JTextArea textArea = new JTextArea(String.valueOf(content.guidelines("norman"))); 
+1

ここでも選択肢はありません。ガイドライン – Ves

+0

@Vesnaこれはメソッドがprivateなのでそれは自分のクラス内でしか見ることができません。自分のクラスの外から呼び出す場合は 'public'にする必要があります。 – SantiBailors

+0

はいSantiBailorsは私がそれを逃した正しいです。呼び出すにはメソッドをpublicにする必要があります。それがあなたの問題を解決した場合は、回答としてマークしてください。 –

1

文字列のコンテンツクラスフィールドを行い、方法のgetContentを定義し、実行します。

JTextArea textArea = new JTextArea(Guidelines.getContent()); 

例:その後、

public class Guidelines { 
    String content; 
    public Guidelines(String buttonName){ 
     guidelines(buttonName); 
    } 

    private String guidelines(String buttonName){ 

     if (buttonName.equals("norman")) 
      content = "Norman is the man!"; 
     if (buttonName.equals("nielsen")) 
      content = "Nielsen is the best!"; 
     if (buttonName.equals("fitt")) 
      content = "Fitt rocks!"; 
     return content; 
    } 

    public String getContent(){ 
     return content; 
    } 
} 

Guidelines content = new Guidelines("norman"); 
JTextArea textArea = new JTextArea(content.getContent()); 
+1

JTextArea textArea = new JTextArea(content.getContent());なぜなら私はドットを作るときにgetContent()を提供しないからです。 – Ves

+1

@Vesna私はそれがtypoだと思う、 'getContent()'は 'private'ではなく' public'でなければなりません。 – SantiBailors

+0

はい、それはタイプミスで、答えは更新されました! –

1
をあなたがのtoStringをオーバーライドすることができます

方法、

public class Guidelines { 

    private final String content; 

    public Guidelines(String buttonName){ 
     content = guidelines(buttonName); 
    } 

    private String guidelines(String buttonName){ 
     String content = ""; 
     if (buttonName.equals("norman")) 
      content = "Norman is the man!"; 
     if (buttonName.equals("nielsen")) 
      content = "Nielsen is the best!"; 
     if (buttonName.equals("fitt")) 
      content = "Fitt rocks!"; 
     return content; 
    } 

    @Override 
    public String toString() { 
     return content; 
    } 
} 

、その後、あなたは、コンテンツの価値を得るためにtoStringメソッドを呼び出すことができ

Guidelines content = new Guidelines("norman"); 
 
TextArea textArea = new JTextArea(content.toString());

+0

これは、私はちょうどいくつかの変更を加えました。私は "プライベートファイナル"なしでStringコンテンツを書いて、あなたが言ったように文字列をオーバーライドしてから、私のメインメソッドでJTextArea textArea = new JTextArea(String.valueOf(content) – Ves

+0

もちろんですが、良いコーディング標準を考慮すると "プライベートファイナル"と最もよく繋がります –

関連する問題