2013-05-14 2 views
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}; 
    } 
} 

Примечание классы ARENT полные, только фрагменты.

Когда пользователь нажимает кнопку «Добавить» (addActionPerformed), значения сохраняются в локальных переменных класса AddStream и возвращаются getData().

Проблемы у меня есть с addStream.getData() ;, я получаю «не может найти символ»

Есть ли способ, чтобы получить эти данные из AddStream JFrame в Init класса?

+0

1) См. [Использование нескольких JFrames, Good/Bad Practice?] (Http://stackoverflow.com/a/9554657/418556) 2) Для лучшей помощи раньше, отправьте сообщение [SSCCE] (http://sscce.org/). –

ответ

2

Ваша проблема может быть легко исправлена ​​путем изменения этой строки:

JFrame addStream = new AddStream(); 

Для этого:

AddStream addStream = new AddStream(); 

Что происходит в вашем коде, что вы пытаетесь вызвать метод на JFrame который не существует на JFrame, он существует только в AddStream. Даже если ваш JFrameis-aAddStream, в этом случае компилятор запрещает это, если вы не сообщите компилятору, что это - AddStream. И вы делаете это с кодом, который я вам показал.

Другой способ заключается в том, чтобы использовать его в своем вызове. Представьте, что вы использовали код из выше, вы могли бы сделать это на последней строке:

((AddStream) addStream).getData(); 
+0

Вау, я чувствую себя немым после этого ... – alex2005

+0

@ alex2005 Это происходит :) –

+0

сейчас я не получаю сообщение об ошибке, но при попытке этой строки [] data = addStream.getData(); System.out.println (данные [0]); Im получает нуль, может быть потому, что код продолжается, не дожидаясь окна, чтобы закрыть и получить данные ... Любой способ сделать это? – alex2005

0

Во время исполнения, когда вы делаете

JFrame addstream = new AddStream(); 

объект рассматривается как простой JFrame (с использованием JFrame часть класса AddStream). getData() доступен только для объектов типа AddStream. Вы можете обмануть JVM в использовании назначенного типа

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

это иногда полезно при переключении между различными реализациями одного и того же интерфейса. Обратите внимание, что передача выполняется только для компилятора. Среда выполнения проверяет только экземпляр и идет вперед, если условие оценивается как true.

Смежные вопросы