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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание панелей по меняющимся именам, заранее неизвестно название класса 
:(
    Опции темы
nimus
  Дата 26.8.2003, 03:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет всем!
Вопрос: я имею ряд динамически меняющихся названий классов в виде строк (читаю из БД). Как правило эти классы производные от JPanel. Мне надо их впихнуть на закладки TabbedPane. Проблема в том, что имен заранее не знаю, т.е. прописать переменной класс при инициализации не могу. Кто подскажет, как это можно сделать?
Или упростив задачу: имеем в каталоге апплеты ряд .class файлов. Как по вводу в тектовом поле названия класса, файл которого имеется, и подтверждении ввода нажатием кнопки, на панели апплеты именно его и открыть?
Заранее благодарен!
  Вверх
DarkDS
Дата 26.8.2003, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

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



1. Нужно сделать какой либо интерфейс с классом инициализации... Или одни и тот же конструктор.
2. Далее берем переменную, в которой будет класс...
3. берем Class cl = Class.forName( className );
4. Если сделан конструктор без параметров, то делается просто:
JMyPanel panel = (JmyPanel)cl.newInstance();
иначе придется брать конструтор, и запускать тока его... Или брать метод и запускать этот метод smile.gif
Если нужно подробнее - распишу

PM MAIL   Вверх
Unregistered
Дата 26.8.2003, 22:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Во-первых, спасибо за ответ!!
До п.3 включительно - no problem. А далее - упс... Я имею ряд классов, причём разных. Т.е. я не могу написать JMyPanel, т.к. не знаю название класса. Может это будет "TMyPanel", а может и "Tratatatatatata". Оно у меня в переменной лежит в виде строки.
Может я чего-то другое не так вытворяю, посему привожу прям кусок кода:

try {
Class cl = Class.forName(theModuleClassName);
JComponent panel = (JComponent)cl.newInstance();
}
catch(ClassNotFoundException cnfe){
System.out.println(cnfe.toString());
}
fTabbedPane.addTab(theModuleName+" (модуль "+theModuleClassName+")", null, panel);

Кричит при компиляции на последней строке вот так:
TMainCMSPanel.java:89: Undefined variable: panel

Извиняюсь за непонятливость sad.gif Можно попросить подробнее описать?
  Вверх
DarkDS
Дата 26.8.2003, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

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



По поводу разных классов: Можно приводить к любомму классу-предку (к примеру к той же JPanel)
Если написаны будут тобой, то можно сделать абстрактный класс, наследованный от той же JPanel и все классы наследовать от этого класса и, соответсвенно, приводить к нему...

По поводу инициализации:
JComponent panel = null; //Нужно для видимости вне блока трай-кетч (смотри области видимости переменных)
try {
Class cl = Class.forName(theModuleClassName);
panel = (JComponent)cl.newInstance();
}
catch( Exception cnfe ){ /*Лудше ловить просто Эксепшин.. Так как newInstance может бросить эксепшин, если конструктора без параметров нет и при приведении к компоненту может быть ClassCastException*/
cnfe.printStackTrace();
System.out.println(cnfe.toString());
}
if (panel != null ) //А вдруг был эксепщин.
fTabbedPane.addTab(theModuleName+" (модуль "+theModuleClassName+")", null, panel);



PM MAIL   Вверх
Unregistered
Дата 26.8.2003, 23:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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

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

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


 




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


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

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