0

所以我有这些课程

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

注意类不完整,只是片段。

当用户单击添加按钮 (addActionPerformed) 时,值将保存到 AddStream 类中的局部变量并由 getData() 返回。

我遇到的问题是 addStream.getData();,我得到“找不到符号”

有没有办法从 AddStream JFrame 获取数据到 Init 类?

4

2 回答 2

2

通过更改此行可以轻松解决您的问题:

JFrame addStream = new AddStream();

对此:

AddStream addStream = new AddStream();

您的代码中发生的事情是您试图在 a 上调​​用一个JFrame不存在于 a 上的方法JFrame,它只存在于 a 中AddStream。即使在这种情况下您的JFrame is-a AddStream,编译器也会禁止这样做,除非您告诉编译器它 is-a AddStream。你用我给你看的代码做到这一点。

另一种方法是在您的通话中使用它。想象一下,您正在使用上面的代码,然后您可以在最后一行执行此操作:

((AddStream) addStream).getData();
于 2013-05-14T01:50:36.737 回答
0

在运行时当你这样做

JFrame addstream = new AddStream();

该对象被视为一个简单的 JFrame(使用 AddStream 类的 JFrame 部分)。getData() 仅适用于 AddStream 类型的对象。您可以欺骗 JVM 使用分配的类型

if( addstream instanceof AddStream ){
    (AddStream) addstream.getData();
} else {
    //TODO
}

这在同一接口的不同实现之间切换时有时很有用。请注意,演员表只是为了通过编译器。运行时仅检查 instanceof 并在条件评估为 true 时继续。

于 2013-05-14T02:21:25.327 回答