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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как присвоить каждое сообытие свою иконку в jTree 
:(
    Опции темы
XClan
Дата 3.2.2004, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как присвоить каждое сообытие свою иконку в jTree?
Например имеется 2 операции в конт.меню для какого то элемента в jTree:
То есть нажал на Start - иконка стала зеленой ( то есть активной), нажали на Stop - стала красной ( Не активна)

Код

private void jTree1ValueChanged(javax.swing.event.TreeSelectionEvent evt) {
       DefaultTreeModel model = (DefaultTreeModel)jTree1.getModel();
       DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                        jTree1.getLastSelectedPathComponent();
       m_popup = new JPopupMenu();
     if (rootNode == null) return;
       Object object = node.getUserObject();
if ( object instanceof AggregP ) {
                 m_popup = new JPopupMenu();
                 m_popup.add(new AbstractAction("Start") {
                   public void actionPerformed(ActionEvent e) {
               ?confused.gif?? // передача сообытий для изминения иконки, если не соответвует выбранному статусу иконки   или отмена
            }
            });
                 m_popup.add(new AbstractAction("Stop") {
                   public void actionPerformed(ActionEvent e) {
                 ?confused.gif?? // передача сообытий для изминения иконки, если не соответвует выбранному статусу иконки  или отмена
            }
            });
                 jTree1.add(m_popup);
      }


Если для иконок в jTree имеется такого рода код:
Код

private class MyIconTree extends DefaultTreeCellRenderer {
       ImageIcon Aggreg_activ;
       ImageIcon Aggreg_no_activ;
       public MyIconTree() {
           Aggreg_activ = new javax.swing.ImageIcon(getClass().getResource("/images/green_a.gif")); // активная
           Aggreg_no_activ = new javax.swing.ImageIcon(getClass().getResource("/images/red_a.gif")); // не активная
       }
       public Component getTreeCellRendererComponent(
                               JTree tree, Object value, boolean selected,
                               boolean expanded, boolean leaf, int row, boolean hasFocus) {
           Component result = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
       DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
       Object object = node.getUserObject();
           setText(object.toString());
                 if(object instanceof AggregP){
               setIcon(Aggreg_no_activ); //по умолчанию не активная
           }
           return result;
       }
   }



--------------------
rm -rf /bin/laden
PM MAIL WWW   Вверх
KDA
Дата 4.2.2004, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



getTreeCellRendererComponent вызывается каждый раз при перерисовке
узла дерева, поэтому в объкт AggregP необходимо определить поле
boolean active и в указанном выше методе проверять данное поле и
установливать соответствующее изображение. Кроме этого при выборе
элемента в PopupMenu необходимо изменить active и вызвать перерисовку
данного узла
PM MAIL   Вверх
XClan
Дата 4.2.2004, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробовал твой метод и запутался окончательнос c boolean active! :{ Хотя твои мысли я понял......


--------------------
rm -rf /bin/laden
PM MAIL WWW   Вверх
XClan
Дата 5.2.2004, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня что-то не получается - может я где-то ошибся ?
Помогите плиззззззз smile.gif
Код

   private class MyIconTree extends DefaultTreeCellRenderer {
       ImageIcon Aggreg_activ;
       ImageIcon Aggreg_no_activ;

       public MyIconTree() {
           Aggreg_activ = new javax.swing.ImageIcon(getClass().getResource("/images/green_a.gif"));
           Aggreg_no_activ = new javax.swing.ImageIcon(getClass().getResource("/images/red_a.gif"));
       }
       
       public Component getTreeCellRendererComponent(
                               JTree tree, Object value, boolean selected,
                               boolean expanded, boolean leaf, int row, boolean hasFocus) {
           Component result = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
       DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
       MyTreeNode obj=(MyTreeNode)node.getUserObject();
         setText(obj.toString());
         if(obj instanceof AggregP){
            if(obj.getCmpStatus() == 1){
              setIcon(Aggreg_activ);
         }else{
              setIcon(Aggreg_no_activ);
                    }
           }
           return result;
   }
   }


и второй код реагирующая на нажати кнопокй мышки на конт.меню...

Код

private void jTree1ValueChanged(javax.swing.event.TreeSelectionEvent evt) {
      DefaultTreeModel model = (DefaultTreeModel)jTree1.getModel();
      DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                       jTree1.getLastSelectedPathComponent();
      m_popup = new JPopupMenu();
    if (rootNode == null) return;
                 MyTreeNode aggP= (MyTreeNode) object;
if ( object instanceof AggregP ) {
                m_popup = new JPopupMenu();
                m_popup.add(new AbstractAction("Start") {
                  public void actionPerformed(ActionEvent e) {
                          aggP.setCmpStatus(1);
           }
           });
                m_popup.add(new AbstractAction("Stop") {
                  public void actionPerformed(ActionEvent e) {
                          aggP.setCmpStatus(0);
           }
           });
                jTree1.add(m_popup);
     }


Проблемы в aggP.setCmpStatus(1);
Сам конструктор MyTreeNode выглядит так:

Код

public class MyTreeNode extends Object {

       public void setActive(boolean act_ok)
               {
               active = act_ok;
               }

       public boolean isActive()
               {
                return active;
               }

       public void setCmpStatus(int s){
           status=s;
       }
       public int getCmpStatus(){
           return status;
       }

       private boolean active;
       protected int status;
}

Thanks!

Это сообщение отредактировал(а) XClan - 5.2.2004, 15:53


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

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

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


 




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


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

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