![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| dsCode |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: нет Всего: 26 |
Привет всем =) В Java я новичок (в основном занимаюсь PHP и JavaScript). Вопрос по деревьям в Swing'e. Я пишу систему тестирования, так вот, мастер создания тестов представляет создание теста в виде дерева (первый уровень - название теста, второй - вопросы теста, третий - варианты ответов на вопросы).
Структура дерева:
Вопросы: 1. Как получить порядковый номер чайлда в узле? Я добавляю номера вопросов (ну здесь просто - использую "getChildCount() + 1"). А в случае с вариантами ответов ("1.1", "1.2" и т.д.) - если верхние узлы закрыты, то для нижних добавляется правильно (например, "2.1", "2.2"), но если в первый вопрос было добавлено два варианта ответа и узел вопроса раскрыт, то добавляется "4.1", "4.2". Я использовал "getLeadSelectionRow()" и "getRowCount()" - все равно Sad Как мне, зная узел, получить правильные порядковый номер, УЧИТЫВАЯ ТОЛЬКО НУЖНЫЙ УРОВЕНЬ? Т.е., чтобы в дерево не представлялось, как линейный список и не считались вложенные ветви. 2. Самый главный вопрос: юзеру нужно будет выбрать номер правильного варианта ответа (только один). Естественно, варианты ответов должны добавляться радио-баттонами (и быть группой). Т.е. при добавлении первого варианта - сразу radio выбран, дальше добавляется второй вариант - радио - не активен, но его можно выбрать, чтобы указать, что этот вариант ответа в этом вопросе - правильный. Там что-то связанно с UserObject, но я не особо пока понял, что с ним сделать. Вот вырезка кода по работе с деревом:
Заранее спасибо всем, кто ответит. P.S.: оффтоп - опечатался в названии темы, исправьте, пожалуйста: "в кажестве" -> "в качестве" Это сообщение отредактировал(а) dsCode - 21.9.2007, 16:59 |
||||
|
|||||
| dorogoyIV |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 36 Всего: 46 |
не надо порядковый номер если добавлять в выделенный узел. примерно:
Это сообщение отредактировал(а) dorogoyIV - 22.9.2007, 00:51 |
|||
|
||||
| dorogoyIV |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 36 Всего: 46 |
а зачем группы радио_баттон? пишешь в конструкторе:
ну и опять же получаешь имя выделенного нода и т.д. ... |
|||
|
||||
| dsCode |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: нет Всего: 26 |
dorogoyIV, спасибо за ответ. По первому вопросу - значит нет определенного свойства и метода, только substring'ом.. Угу.. Но все равно, спасибо - тоже способ, сделаю, пожалуй, так =)
А насчет второго - выделять-то понятно, что можно будет только один лист, но здесь нужно чтобы юзер видел признак правильного варианта ответа. Во всех раскрытых нодах у листьев должна стоять "галочка", что именно этот вариант верный. Самый правильный вид был бы с радио-баттонами. А вот можно ли такое сделать... Думаю да - по части просто добавления радио-баттонов, но ситуация осложняется тем, что радио должны быть группой. |
|||
|
||||
| dorogoyIV |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 36 Всего: 46 |
в общем не получилось у меня засунуть в дерево чекбокс или радиобаттон. зато иконку легко.
ну можно на иконке нарисовать то, что нужно (например галочку или кружочек как в радио |
|||
|
||||
| dsCode |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: нет Всего: 26 |
dorogoyIV, c чекбоксами видел реальный пример, чуть позже найду ссылку. По аналогии можно и радио запихать, наверное (только, опять же, повторю - как их сделать группой потом еще?). А насчет иконок - тоже идея! Если можно менять динамически иконку (ведь можно, правда? или я ошибаюсь?) - то в событии по выделению нода - снимать "выделенную иконку" у предыдущего листа и ставить ее к новому выделенному, а старому ставить прозрачную (ну и куда-то записывать признак правильности варианта по текущему вопросу). Thx =)
|
|||
|
||||
| dorogoyIV |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 36 Всего: 46 |
не знаю почему тебя так пугает сделать группу?
кстати напомню, ButtonGroup объединяет радио только логически. значит при добавлении или удалении надо делать два действия - добавлять/удалять 1.в группу и 2.на панель . |
|||
|
||||
| dsCode |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: нет Всего: 26 |
dorogoyIV, да нет же, объединение радио-баттонов в группу меня вовсе не пугает. Речь идет о том, что эти радио - листья дерева. Т.е. что это должно означать: при добавлении чайлд-нода - добавляется радио или же - сначала формируется группа, содержащая радио и потом уже эта группа добавляется как единственный нод. В общем, вот это как-то не понятно.
хм.. а альтернативу можно найти? например, таблицы (JTalbe)? - там можно несколько уровней делать (первый уровень - вопросы, второй - варианты ответов)? В сущности - тоже дерево, только в табличном виде, этакий outline =) Это сообщение отредактировал(а) dsCode - 23.9.2007, 14:51 |
|||
|
||||
| dsCode |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: нет Всего: 26 |
научился я делать радио-баттонами листья, но похоже, не удастся реализовать задумку :( Всплыла еще одна проблема: одиночный выбор. Нужно делать так, чтобы, если на третьем уровне выбран нод (радио-баттон), то он так и должен остаться выбранным (выделенным). Из-за одиночного выделения - кликаем на втором уровне - выделение (признак правильности) на третьем уровне снимается. Более того, нужно, чтобы на третьем уровне в разных группах оставалось свое выделение, т.е. выделили в первом вопросе правильный вариант, потом - во втором - и все это должно быть обычным кликом - без Shift'ов и Ctrl'ов (если говорить о мульти-выборе). Вообще, подошел бы мульти-выбор, если была бы возможность задать его только для определенного уровня (для третьего). Того я думаю, может можно сэмитировать нажатие Shift'a или Ctrl'a при выборе в другой группе. Это возможно вообще?
|
|||
|
||||
| dorogoyIV |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 36 Всего: 46 |
так ты наверное все в одну баттонгруппу добавил? надо для каждого узла с детями свою группу делать из этих детей.
|
|||
|
||||
| dsCode |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: нет Всего: 26 |
dorogoyIV, и что это будет означать? Что узел имеет одного чайлда - группу (в которой 4 радио), а не четыре? Чайлды добавляются динамически - т.е. радио-баттон появляется сразу. Т.е. предварительно перед добавлением первого чайлда - добавить единственного чайлда - группу и уже потом добавлять в эту группу радио, так? Интересно, это вообще возможно? В смысле, добавить JButtonGroup чайлдом в нод.. Если да, то - это будет единственный чайлд нода, а при добавлении вариантов ответов - брать этого чайлда и делать ему уже add(...), добавляя радио в группу.
|
|||
|
||||
| dorogoyIV |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 36 Всего: 46 |
Тест "Название теста"
| |___1. Первый вопрос | | | |___1.1 Вариант ответа#1 | | | |___1.2 Вариант ответа#2 | |___2. Второй вопрос | |___2.1 Вариант ответа#1 | |___2.2 Вариант ответа#2 я имею ввиду - в первой группе будут "1.1 Вариант ответа#1, 1.2 Вариант ответа#2" во второй "2.1 Вариант ответа#1, 2.2 Вариант ответа#2" если добавлять "1.3 Вариант ответа#3" , то его надо будет добавить в первую группу группа только логически объединяет радио баттоны, она их не рисует на экране |
|||
|
||||
| dsCode |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: нет Всего: 26 |
dorogoyIV, да, только дело в том, что добавляются не радио-баттоны (вернее, радио-баттоны, но не в классическом виде). Реализована своя имплементация интерфейса TreeCellRenderer, где сказано, что вид листье - радио-баттоны, но они остаются листьями. Хотя....... при добавлении вопроса - создавать параллельно группу (не связанную с деревом) и пытаться добавить эти "литья" в группу (параллельно с добавлением в дерево).. Не знаю, можно будет так или нет (все таки это не просто радио-баттоны, а листья) - но попробую. Спасибо за совет! =)
Это сообщение отредактировал(а) dsCode - 26.9.2007, 14:31 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |