我如何从主类调用textArea以便我可以在另一个类中使用它?

时间:2016-05-08 07:29:16

标签: java jtextarea

如果我点击btn_check,我想这样做,错误消息将出现在txt_msg(JTExtArea)上。我使用命令行完成了这段代码,它可以工作。只是我想在我的GUI中应用它。

这是我的主要课程

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

这是我的解析器类

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
}

我尝试使用new_txt_msg.setText(m.toString()),但它没有用。

1 个答案:

答案 0 :(得分:0)

从你提供的代码中不清楚,但是从我在这里看到的你创建了一个新的解析器对象,你没有像之前那样调用parse()方法。如果这是你需要的问题:

  • 为您的解析器类创建一个新的构造函数,该构造函数同时获取Scanner和JTextArea
  • 调用它上面的parse()方法
  • 让parse()方法调用report_error()方法
  • 现在在你的parse()方法中,你可以调用setText()

我建议但是,如果可以的话,是让你的parse()方法返回错误信息(或者一个更复杂的对象,保存信息和某种返回代码),然后调用setText( )JTextArea上的方法直接在actionPerformed()内部。通过这种方式,您将解耦纯计算(输入解析)和GUI管理(取消计算结果)。

另外,请查看SwingWorker课程;如果您的解析可能是一个很长的操作,从actionPerformed()方法调用它可能会挂起您的GU​​I