![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
nimus |
|
|||
Unregistered |
Привет всем!
Вопрос: я имею ряд динамически меняющихся названий классов в виде строк (читаю из БД). Как правило эти классы производные от JPanel. Мне надо их впихнуть на закладки TabbedPane. Проблема в том, что имен заранее не знаю, т.е. прописать переменной класс при инициализации не могу. Кто подскажет, как это можно сделать? Или упростив задачу: имеем в каталоге апплеты ряд .class файлов. Как по вводу в тектовом поле названия класса, файл которого имеется, и подтверждении ввода нажатием кнопки, на панели апплеты именно его и открыть? Заранее благодарен! |
|||
|
||||
DarkDS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
1. Нужно сделать какой либо интерфейс с классом инициализации... Или одни и тот же конструктор.
2. Далее берем переменную, в которой будет класс... 3. берем Class cl = Class.forName( className ); 4. Если сделан конструктор без параметров, то делается просто: JMyPanel panel = (JmyPanel)cl.newInstance(); иначе придется брать конструтор, и запускать тока его... Или брать метод и запускать этот метод ![]() Если нужно подробнее - распишу |
|||
|
||||
Unregistered |
|
|||
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 Извиняюсь за непонятливость ![]() |
|||
|
||||
DarkDS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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); |
|||
|
||||
Unregistered |
|
|||
Unregistered |
Огромное спасибо!!! Кое-что вышло, кое-что еще хочу попробовать усложнить. Классы от панелей производные работают без проблем. С апплетами пока не выходит их сбрасывать на закладки. Но это мелочь, действительно надо выбрать один какой-то абстрактный класс и от него прыгать далее.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |