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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание диалога во время выполнения 
:(
    Опции темы
солдат
Дата 7.2.2010, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Есть форма созданная на базе JFrame. Из под нее запускается другая форма, созданная
на базе JDialog. При этом класс запускаемой формы определяется во время выполнения основной 
программы. Запускаемая форма создается функцией newInstance(). Проблем выполнить такой запуск нет. 
Задача заключается в том, чтобы в запускаемую форму передать ссылку на родительский JFrame (того, кто ее запустил).
Традиционно такая процедура выполняется через конструктор, но в моем случае используется конструктор по
умолчанию, т.е. без параметров. Помогите найти решение.
PM MAIL   Вверх
jk1
Дата 7.2.2010, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Способ первый.
Код

public void showDialog(Class<? extends JDialog> dialogClass, JFrame frame)
          throws NoSuchMethodException, InvocationTargetException,
          IllegalAccessException, InstantiationException {
      dialogClass.getConstructor(Frame.class).newInstance(frame).setVisible(true);
  }

Только убедитесь, что все ваши наследники JDialog реализуют нужный конструктор.

Способ второй.

Создайте где-либо метод, возвращающий ссылку на ваше основное окно. После этого спокойно вызывайте этот метод из конструкторов диалогов.


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



System.out.println(getParent().getParent());
PM MAIL   Вверх
солдат
Дата 7.2.2010, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо всем!
PM MAIL   Вверх
солдат
Дата 7.2.2010, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



jk1 объясните пожалуйста, откуда взять параметр  dialogClass.

Вот мой код

метод класса JFrame

Код

public void startModule(String namePM){
        try{
            Class<BaseForm> obj = (Class<BaseForm>) Class.forName("module."+namePM);
            BaseForm module = obj.newInstance();
            module.setParent(this);
            module.startForm(namePM);
            module.setVisible(true);
        }
       catch(InstantiationException e) {
            JOptionPane.showMessageDialog(jDesktopPane, "Не возможно создать класс - "+e.getMessage(), "Ошибка" , JOptionPane.ERROR_MESSAGE);
            System.err.println("Cannot instantiate - "+e);
        }
        catch(IllegalAccessException e) {
            System.err.println("Cannot access");
        }
        catch(ClassNotFoundException e) {
            JOptionPane.showMessageDialog(jDesktopPane, "Не найден класс - "+e.getMessage(), "Ошибка" , JOptionPane.ERROR_MESSAGE);
            System.err.println("No such class: " + e);
        }
        
    }


конструктор по умолчанию класса (наследника от JDialog) запускаемой формы
Код


    public KL_TERM(){
        super(null,false);
        initialize();
    }



Надо в место null, передать ссылку на объек который запустил этот диалог

В предложенном вами варианте, метод showDialog, я разместил в запускаемом диалоге.
Но ломается на 
Код

dialogClass.getConstructor(Frame.class);


Подскажите, что я делаю неправильно.
PM MAIL   Вверх
jk1
Дата 7.2.2010, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

объясните пожалуйста, откуда взять параметр  dialogClass.

dialogClass - это класс вашего диалога. Чтобы было понятнее, приведу пример: пусть есть класс
Код

public class SomeDialog extends JDialog{ ...

тогда dialogClass можно получить, например, как
Код

Class dialogClass = SomeDialog.class;

Судя по вашему коду, в переменной obj лежит как раз это значение.
Идем дальше. Сваливается он у вас потому, что нет конструктора
Код

public KL_TERM(Frame frame){
        super(frame,false);
        // теперь по ссылке frame вам доступно родительское окно 
        initialize();
}

о чем я вас предупреждал:
Цитата

Только убедитесь, что все ваши наследники JDialog реализуют нужный конструктор.



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


Новичок



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

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



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

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

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


 




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


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

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