Java 我如何从主类调用textArea,以便在另一个类中使用它?
我想这样做,如果我点击btn_检查,错误消息将出现在txt_消息(JTExtArea)。我已经使用命令行完成了这段代码,它很有效。只是我想在我的GUI中应用它 这是我的主课Java 我如何从主类调用textArea,以便在另一个类中使用它?,java,jtextarea,Java,Jtextarea,我想这样做,如果我点击btn_检查,错误消息将出现在txt_消息(JTExtArea)。我已经使用命令行完成了这段代码,它很有效。只是我想在我的GUI中应用它 这是我的主课 public void actionPerformed(ActionEvent e) { Object click = e.getSource(); if (click == btn_check){ BufferedReader br = null; try {
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\u txt\u msg.setText(m.toString())
,但它不起作用。从您提供的代码中看不清楚,但从我这里看到的情况来看,您正在创建一个新的parser对象,在这个对象上,您没有像以前那样调用parse()方法。如果这是问题所在,您需要:
- 为解析器类创建一个新的构造函数,该类同时获取Scanner和JTextArea
- 对其调用parse()方法
- 让parse()方法调用您的report\u error()方法
- 现在,在parse()方法中,您将能够调用setText()
另外,看一看课堂;如果您的解析可能是一个很长的操作,那么从actionPerformed()方法调用它可能会挂起您的GUI从您提供的代码中看不清楚,但是从我这里看到的情况来看,您正在创建一个新的parser对象,在这个对象上,您没有像以前那样调用parse()方法。如果这是问题所在,您需要:
- 为解析器类创建一个新的构造函数,该类同时获取Scanner和JTextArea
- 对其调用parse()方法
- 让parse()方法调用您的report\u error()方法
- 现在,在parse()方法中,您将能够调用setText()
另外,看一看课堂;如果您的解析可以是一个很长的操作,那么从actionPerformed()方法调用它可能会挂起您的GUI我猜它会像
mainclass.JTextArea.getText()
一样简单,但如果不是这样,您将需要一个setter
和getter
。我猜它会像mainclass.JTextArea.getText()一样简单
但如果不是,您将需要一个设置器
和一个获取器
。谢谢您的建议。我问过我的一位老师,他也是这么说的。但是我不能更改方法report\u error()
的数据类型,因为它是类内解析器的默认类型(parser扩展了java\u cup.runtime.lr\u parser
)。因此,我试图将值m传递给另一个方法(我创建了一个新方法write()
),它可以返回m的值。我现在的问题是我不知道如何调用Main中的方法。你能帮我吗?:)我认为您不需要其他方法来返回m,您已经有了report_error()-只需让它返回m.toString()。至于子类问题,我需要更多的信息。。。您是重写了parse()方法还是使用了超类实现?如何使用report_error()方法?我知道了,对不起,我不知道库。。。因此,我们必须回到前面的解决方案:当您定义parser的子类时,给它一个这样的构造函数:public myParser(Scanner in,JTextArea a){super(in);new_txt_msg=a;},然后调用new_txt_msg.setText(m.toString()),正如您首先想做的那样仍然无法工作:(没关系,我明天会告诉我的讲师。谢谢你。顺便说一句:)没有完整的代码,我不能再往前走了……祝你好运!:)谢谢你的建议。我问过我的一位老师,他也是这么说的。但是我不能更改方法report\u error()
的数据类型,因为它是类内解析器的默认类型(parser扩展了java\u cup.runtime.lr\u parser
)。因此,我试图将值m传递给另一个方法(我创建了一个新方法write()
),它可以返回m的值。我现在的问题是我不知道如何调用Main中的方法。你能帮我吗?:)我认为您不需要其他方法来返回m,您已经有了report_error()-只需让它返回m.toString()。至于子类问题,我需要更多的信息。。。您是重写了parse()方法还是使用了超类实现?如何使用report_error()方法?我知道了,对不起,我不知道库。。。因此,我们必须回到前面的解决方案:当您定义parser的子类时,给它一个这样的构造函数:public myParser(Scanner in,JTextArea a){super(in);new_txt_msg=a;},然后调用new_txt_msg.setText(m.toString()),正如您首先想做的那样仍然无法工作:(没关系,我明天会告诉我的讲师。谢谢你,顺便说一句:)没有完整的代码,我不能再往前走了……祝你好运!:)