Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как передать переменную из одного окна в другое? 
:(
    Опции темы
neic
Дата 5.4.2010, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



Допустим есть 2 формы: NewApplication.java и NewJFrame.java

Код

public class NewApplication extends javax.swing.JFrame {
    String strok;
...
}


Как мне получить в NewJFrame значение переменной strok в NewApplication?

Я просто разбираюсь с переменными, понял как делать глобальные переменные на окно, а вот как передать переменные из одного окна в другое не могу понять.

Перехожу с VB6, поэтому много чего не понятно в Java.
Java учу не очень долго.
Буду рад любым замечаниям.
PM MAIL WWW ICQ Skype   Вверх
jk1
Дата 5.4.2010, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Решение ваше проблемы сильно зависит от задачи. Самый простой способ - хранить ссылку на второе окно и вызывать его метод для доступа к переменной.
Код

public class Main {
    public static void main(String[] args) {
      FirstFrame frame1 = new FirstFrame();
      SecondFrame frame2 = new SecondFrame(frame1);  
    }
}

class FirstFrame extends JFrame {
    private String name="sample string";

    public String getName() {
        return name;
    }
}

class SecondFrame extends JFrame {
    public SecondFrame(FirstFrame frame){
        System.out.println(frame.getName());
    }
}



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
neic
Дата 5.4.2010, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



Сделал как Вы сказали, теперь в коде подсвечивается NewJFrame и NewJFrame1 красной полоской.
В чем ошибка?

NewJFrame:
Код


package MDI;

public class NewJFrame extends javax.swing.JFrame {
    private String name="sample string";

    public String getName() {
        return name;
    }

    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(152, 152, 152)
                .addComponent(jButton1)
                .addContainerGap(175, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(76, 76, 76)
                .addComponent(jButton1)
                .addContainerGap(201, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        new NewJFrame1().setVisible(true);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });

      NewJFrame frame1 = new NewJFrame();
      NewJFrame1 frame2 = new NewJFrame1(frame1);
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    // End of variables declaration

}



NewJFrame1:
Код

package MDI;

public class NewJFrame1 extends javax.swing.JFrame {
    String strok_1;

    public NewJFrame1(NewJFrame frame) {
        initComponents();
        strok_1 = frame.getName();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(112, 112, 112)
                .addComponent(jButton1)
                .addContainerGap(215, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(63, 63, 63)
                .addComponent(jButton1)
                .addContainerGap(214, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
            jButton1.setText(strok_1);
    }


    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame1().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    // End of variables declaration

}



Это сообщение отредактировал(а) neic - 5.4.2010, 21:11
PM MAIL WWW ICQ Skype   Вверх
jk1
Дата 5.4.2010, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Ошибка в том, что вы объявили параметр конструктора, но не передаете его.  Один вызов логично исправить, передав искомый параметр:
Код

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        new NewJFrame1(this).setVisible(true);
    }

а что касается второго вызова, 
Код

 public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame1().setVisible(true);
            }
        });
    }

то он сам по себе выглядит не слишком логично. В самом деле, пусть окну А требуется функциональность окна Б в обязательном порядке. Тогда создавать окно А без существующего окна Б бессмысленно.

Бывают также ситуации, когда программные компоненты, как окна в вашем случае, не являются зависимыми, но вынуждены разделять некие данные на равноправной основе. В этом может помочь отдельный класс-хранилище, к объектам которого будут иметь доступ все ваши окна.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
neic
Дата 5.4.2010, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



jk1, да хотелось бы иметь одно хранилище переменных в отдельном классе и обращаться к ним через формы.

Например в VB6 можно создать Module1.bas и сделать все переменные глобальными. И я в любое время мог их считать/записать/перезаписать.

Ну вот допустим:
Код

' в модуле
Public peremen as string

' в какой-либо процедуре
Module1.Peremen = "Это кнопка"
Command1.Caption = Module1.Peremen


Можно так сделать в JAVA?

Добавлено через 4 минуты и 44 секунды
Цитата(jk1 @  5.4.2010,  22:08 Найти цитируемый пост)
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {        new NewJFrame1(this).setVisible(true);    }

И еще один вопрос, почему именно this передаем?

PM MAIL WWW ICQ Skype   Вверх
sergioK
Дата 5.4.2010, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(neic @ 5.4.2010,  23:13)
jk1, да хотелось бы иметь одно хранилище переменных в отдельном классе и обращаться к ним через формы.

Например в VB6 можно создать Module1.bas и сделать все переменные глобальными. И я в любое время мог их считать/записать/перезаписать.


Можно так сделать в JAVA?

Добавлено @ 23:18
Цитата(jk1 @  5.4.2010,  22:08 Найти цитируемый пост)
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {        new NewJFrame1(this).setVisible(true);    }

И еще один вопрос, почему именно this передаем?

читать  про static 



 
PM MAIL   Вверх
neic
Дата 6.4.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



Всем спасибо разобрался. Пошел узнавать про MDI интерфейсы.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1109 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.