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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переопределение метода класса JTree, метод convertValueToText() 
V
    Опции темы
d0ger
Дата 25.10.2011, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Узлом дерева JTree могут быть данные любых типов, а на экран выводится строка получаемая методом toString() вызываемая в свою очередь convertValueToText().

Необходимо, чтобы узлом дерева служил объект класса JDir. А на экран выводилось имя узла - JDir.name. 

Если не переопределять convertValueToText() то выводится ссылка на объект класса JDir.
Код

DefaultMutableTreeNode Node = new DefaultMutableTreeNode(Dir);


В книге "Эффективные пользовательские интерфейсы" Ивана Портянкина написано:
Цитата

Интересно, что для преобразования узла в строку, которая будет выведена на экран, стандартный отображающий объект не вызывает напрямую метод toString(), а применяет особый метод класса JTree с названием convertValueToText().  По  умолчанию  данный  метод  просто  вызывает  для  узла  метод toString(), но вы можете переопределить его и обрабатывать преобразование узла в строку по-своему.


Но как можно переопределить метод convertValueToText() класса JTree и так, чтобы при выводе дерева на экран использовался именно переопределенный метод?

Исходный convertValueToText() имеет вид:
Код

    public String convertValueToText(Object value, boolean selected,
                                     boolean expanded, boolean leaf, int row,
                                     boolean hasFocus) {
        if(value != null) {
            String sValue = value.toString();
            if (sValue != null) {
                return sValue;
            }
        }
        return "";
    }


Я представляю что нужно изменить его на что-то вроде этого:
Код

    public String convertValueToText(Object value, boolean selected,
                                     boolean expanded, boolean leaf, int row,
                                     boolean hasFocus) {
        if(value != null) {
            String sValue = value.name.toString();
            if (sValue != null) {
                return sValue;
            }
        }
        return "";
    }


но куда и как вставить это в своей программе непонятно

Это сообщение отредактировал(а) d0ger - 25.10.2011, 17:57
PM MAIL   Вверх
jk1
Дата 25.10.2011, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Просто переопределите у класс JDir метод toString() так, чтобы он возвращал JDir.name


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


Новичок



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

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



спасибо jk1, простое и изящное решение. Самое главное - работает.
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.0430 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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