我正在制作我的第一个GUI程序,并遇到一个小问题。我需要返回String值,所以我可以在方法“说”中使用它。这部分是一个子类 - 一个在另一个类中构建的类。 错误返回值; gets is:void方法无法返回值。我知道我必须替换虚空,但是用什么?关于奥利弗
private class Eventhandler implements ActionListener{
double amount;
public void actionPerformed(ActionEvent event){
String string = "";
String string1 = "";
if(event.getSource()==item1)
string=String.format(event.getActionCommand());
else if(event.getSource()==item2)
string1=String.format(event.getActionCommand());
JOptionPane.showMessageDialog(null, string);
double fn = Double.parseDouble(string);
double sn = Double.parseDouble(string1);
double amount = fn + sn;
String value = Double.toString(amount);
return value;
}
}
public void saying(){
System.out.println(value);
}
}
答案 0 :(得分:5)
正如其他人所说,你不能从actionPerformed
返回任何内容,因为它是在ActionListener
界面中指定的。即使你可以,它对你没有任何好处,因为你不是那个调用actionPerformed
函数的人。
您想要做的是以某种方式给予父类value
。一种方法是让value
成为父类的字段。然后您可以从actionPerformed
函数设置它:
private class ParentClass {
private String value;
//... stuff ...
private class Eventhandler implements ActionListener{
double amount;
public void actionPerformed(ActionEvent event){
//... stuff ...
ParentClass.this.value = Double.toString(amount);
}
}
public void saying(){
System.out.println(value);
}
}
请注意,您无法在内部类中执行this.value = value
,因为该函数中的this
引用了Eventhandler
实例。您必须使用ParentClass.this
语法来获取父类的this
。将ParentClass
替换为父类的实际名称。
更好的方法可能是在父类上使用setValue()
函数,内部Eventhandler
类调用该函数。这取决于你想做什么。
答案 1 :(得分:0)
您可以创建一个实例变量,但无法在actionPerformed
方法中对其进行初始化,如下所示
private class Eventhandler implements ActionListener{
String value=''
public void actionPerformed(ActionEvent event){
value="newvalue";
// rest code goes here
}
}
你不能改变api定义方法的返回类型
答案 2 :(得分:0)
除非您需要程序中其他位置的String值:
替换
public void saying(){
System.out.println(value);
}
带
public void saying(String value){
System.out.println(value);
}
然后改变
return value;
要
saying(value);