• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:外部クラスから、JTextArea等のコンポーネントへのアクセス)

JTextAreaへのアクセス方法について

このQ&Aのポイント
  • 外部クラスからJTextArea等のコンポーネントにアクセスする方法を教えてください。
  • Threadを承継したクラスからJTextAreaにアクセスする方法についてアドバイスをお願いします。
  • JTextAreaの表示を変えるために、外部のクラスからどのような処理をすればいいのか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.1

 二つの問題がごっちゃになってしまいかねないので、整理します。 1.あるクラスから別のクラスへのアクセスをどうするか? 2.イベント処理スレッド以外のスレッドからSwingコンポーネントへのアクセスの関する問題。 >もっとも、同じことは、イベントリスナクラスを、 >内部クラスではなく、外部クラスとして、記載した >時にも生じてしまいます。  このことから、今回、聞きたいことは1.の方かなと思いますので、まず、1.のほうから。  イベントリスナのクラスを外部クラスにすると、イベント元クラスのインスタンスへの参照がないため、アクセスできないって事ですよね。  ならば、参照を渡してしまえばいいと思います。 public class Button_Clicked implements ActionListener {  private MainFrame owner;  public Button_Clicked(MainFrame frame) {   owner = frame;  }  public void actionPerformed(ActionEvent e) {   owner.textArea.setText("ボタンが押されました。")  } }  このようにイベントリスナクラスをあらかじめイベント元クラスのインスタンスの参照を渡せるように作っておき、実際にこのクラスをnewするときに、自分自身を渡せばいいと思います。 public class MainFrame extends JFrame {  public MainFrame() {  ・・・  button.addActionListener(new Button_Clicked(this));  ・・・  } }  Threadの場合も同じようにすればいいでしょう。  ただ、イベント処理スレッド以外のスレッドからのSwingコンポーネントへのアクセスには注意が必要です。  私もちょうど勉強中の所で、説明しようとするとすぐにぼろが出ると思うので、こちらを参考にしてください。 http://wisdom.sakura.ne.jp/system/java/swing/swing4.html (よく見たらJTextAreaのsetText()もappend()もスレッドセーフって書いてあるので今回はこの問題は関係ないですかね)

noname#10667
質問者

お礼

出来ました。 まさに、思い通りの動作です。 自分では、全く思いつきませんでした。 ありがとうございます(この際、2.の問題も 考えておきます)。

関連するQ&A

専門家に質問してみよう