从另一个框架获取值

时间:2013-05-14 01:45:11

标签: java swing jframe

所以我有这些课程

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类?

2 个答案:

答案 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,则继续运行。