2016-05-08 7 views
1

btn_checkをクリックした場合のようにしたいので、txt_msg(JTExtArea)にエラーメッセージが表示されます。私はコマンドラインを使ってこのコードを実行しました。それは私のGUIでそれを適用したいだけです。メインクラスからtextAreaを呼び出すにはどうすればいいですか?私は別のクラスでそれを使うことができますか?

これは私のメインクラスです

public void actionPerformed(ActionEvent e) { 
    Object click = e.getSource(); 

    if (click == btn_check){ 
     BufferedReader br = null; 

     try { 

      String line; 
      br = new BufferedReader(new FileReader(txt_file.getText())); 
      StringBuilder sb = new StringBuilder(); 

      while ((line = br.readLine()) != null) { 
       sb.append(line + "\n"); 
      } // end while in try 

      String everything = sb.toString(); 

     } catch (IOException error) { 
      error.printStackTrace(); 

     } finally { 
      try { 
       if (br != null)br.close(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } //end try - catch - finally 

     File filename = new File(txt_area.getText()); 

     try { 
      txt_msg.setText("Yes in Main"); 
      // Scan file - read tokens 
      Scanner scanner = new Scanner(new UnicodeEscapes(new FileReader(filename)));  

      // Parse the file 
      parser parser = new parser(scanner); 
      parser.parse(); 

      parser p = new parser(txt_msg); //this is where I want to pass my text area to parser class 

     } catch (Exception err) { 
      syntax_err = true; 
     } 
    } 
} 

これは私がnew_txt_msg.setText(m.toString())を使用することを試みたが、それはうまくいきませんでした

JTextArea new_txt_msg; 

public parser(JTextArea a) { 
    new_txt_msg = a; 
} 

public void report_error(String message, Object info) { 
StringBuffer m = new StringBuffer("Error "); 

if (info instanceof java_cup.runtime.Symbol) 
    m.append("("+info.toString()+")"); 

m.append(" : "+message); 

System.out.println(m); //m holds the error message 
} 

私のパーサクラスです。

+0

'mainclass.JTextArea.getText()'と同じように単純になると思いますが、セッターとゲッター。 –

答えて

0

あなたが提供したコードからは明らかではありませんが、私がここで見ているものでは、以前のようにparse()メソッドを呼び出さなかった新しいパーサオブジェクトを作成しています。それが問題だ場合、あなたはする必要があります:

  • それ
  • にスキャナとJTextAreaに
  • コールparse()メソッドの両方を取得し、あなたのパーサークラスの新しいコンストラクタを作成(パースを持っています)メソッドあなたがのsetText()を呼び出すことができます方法)(あなたのパースに()メソッドになりまし
  • をあなたのReport_Errorを呼び出す

何を、あなたの解析を行うことであるあなたができる場合、私は(、しかし示唆)エラーメッセージを返すメソッド(またはamメッセージと何らかのリターンコードを保持している鉱石複合オブジェクト)を呼び出し、actionPerformed()内のJTextAreaのsetText()メソッドを直接呼び出します。このようにして、純粋な計算(入力解析)とGUI管理(計算結果の表示を外す)を分離します。

さらに、SwingWorkerクラスを参照してください。あなたの解析が長い操作である場合は、actionPerformed()メソッドから呼び出すとGUIがハングする可能性があります

+0

アドバイスをいただきありがとうございます。私は私の教員の上級者に尋ねました、彼はそれも言った。しかし、 'report_error()'メソッドのデータ型を変更することはできません。これは、クラスパーサー( 'parser extends java_cup.runtime.lr_parser')ではデフォルトのものです。だから、私はmの値を返すことができる他のメソッド(私は新しいメソッド 'write()'を作成しました)に値mを渡そうとしています。私の問題は今、メインでメソッドを呼び出す方法がわかりません。手伝ってくれませんか? :) –

+0

私はあなたがすでにreport_error()を持っています - m.toString()を返すように、あなたがmを返すために別のメソッドを必要と思わないと思います。 サブクラス化の問題については、より多くの情報が必要です... parse()メソッドをオーバーライドしたか、スーパークラスの実装を使用していますか? report_error()メソッドはどのように使用しますか? – Antiphon0x

+0

私はそれを試しました、それは互換性がないと言った:( –

関連する問題