所以我有这些课程
public class Init {
...
JFrame addStream = new AddStream();
addStream.setVisible(true);
addStream.setLocationRelativeTo(null);
addStream.getData(); //not working
}
public class AddStream extends javax.swing.JFrame {
private String nameData, urlData, qualityData;
/** Creates new form AddStream */
public AddStream() {
initComponents();
}
private void initComponents() {
...
}
private void addActionPerformed(java.awt.event.ActionEvent evt) {
nameData = name.getText();
urlData = url.getText();
qualityData = quality.getSelectedItem().toString();
}
public String[] getData() {
return new String[]{nameData, urlData, qualityData};
}
}
请注意,这些类并不完整,只是片段。
当用户单击Add按钮(addActionPerformed)时,值将保存到AddStream类中的局部变量,并由getData()返回。
我遇到的问题是使用addStream.getData();,我得到“找不到符号”
有没有办法将数据从AddStream JFrame传递到Init类?
答案 0 :(得分:2)
通过更改此行可以轻松解决您的问题:
JFrame addStream = new AddStream();
对此:
AddStream addStream = new AddStream();
您的代码中发生的一件事是,您尝试在JFrame
上调用JFrame
上不存在的方法,它只存在于AddStream
中。即使您的JFrame
在这种情况下是 AddStream
,编译器也禁止这样做,除非您告诉编译器它是-AddStream
。你用我给你看的代码做到了。
另一种方法是将它投入你的通话中。想象一下,您正在使用上面的代码,然后您可以在最后一行执行此操作:
((AddStream) addStream).getData();
答案 1 :(得分:0)
在运行时
JFrame addstream = new AddStream();
该对象被视为一个简单的JFrame(使用AddStream类的JFrame部分)。 getData()仅适用于AddStream类型对象。您可以欺骗JVM使用指定的类型
if( addstream instanceof AddStream ){
(AddStream) addstream.getData();
} else {
//TODO
}
在同一界面的不同实现之间切换时,这有时非常有用。请注意,强制转换仅用于传递编译器。运行时仅检查instanceof,如果条件计算为true,则继续运行。