Иконка в JTree в режиме редактирования
От: aliks-os  
Дата: 23.06.09 07:52
Оценка:
Написал ренедерер для JTree, чтобы отображать иконки в зависимости от условий

    private class MyObjRenderer extends DefaultTreeCellRenderer {
        @Override
        public Component getTreeCellRendererComponent(
                            JTree tree,
                            Object value,
                            boolean sel,
                            boolean expanded,
                            boolean leaf,
                            int row,
                            boolean hasFocus) {

            super.getTreeCellRendererComponent(
                            tree, value, sel,
                            expanded, leaf, row,
                            hasFocus);
            DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
            NodeInfo nodeInfo = (NodeInfo)node.getUserObject();
            ImageIcon icon = null;
            if (nodeInfo.fld_id == 0) {
                icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-1.png"));
            }
            switch (nodeInfo.type) {
                case 0:    {
                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-2.png"));
                    break;
                }
                case 1001: {
                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-4.png"));
                    break;
                }
                case 1002: {
                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-5.png"));
                    break;
                }
                case 1003: {
                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/900-4.png"));
                    break;
                }
                case 1004: {
                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-3.png"));
                    break;
                }
                case 1005: {
                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-6.png"));
                    break;
                }
                case 1006: {
                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-7.png"));
                    break;
                }
                case 1007: {
                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-8.png"));
                    break;
                }
                case 1008: {
                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-9.png"));
                    break;
                }
                case 1009: {
                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-10.png"));
                    break;
                }
            }

            if (icon!=null) setIcon(icon);
            setToolTipText(value.toString());
            return this;
        }
    }


Все работает ОК. Однако, когда я редактирую ветку или лист, то в режиме редактирования, показывается стандартная иконка.
Как можно сделать, чтобы при редактировании также отображалась та иконка, которая мне необходима
Re: Иконка в JTree в режиме редактирования
От: LDimas Россия  
Дата: 23.06.09 08:06
Оценка:
Как я понимаю тебе надо еще написать свой TreeCellEditor
Re: Иконка в JTree в режиме редактирования
От: Blazkowicz Россия  
Дата: 23.06.09 08:07
Оценка: +2 :))
Здравствуйте, aliks-os, Вы писали:


AO>            switch (nodeInfo.type) {
AO>                case 0:    {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-2.png"));
AO>                    break;
AO>                }
AO>                case 1001: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-4.png"));
AO>                    break;
AO>                }
AO>                case 1002: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-5.png"));
AO>                    break;
AO>                }
AO>                case 1003: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/900-4.png"));
AO>                    break;
AO>                }
AO>                case 1004: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-3.png"));
AO>                    break;
AO>                }
AO>                case 1005: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-6.png"));
AO>                    break;
AO>                }
AO>                case 1006: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-7.png"));
AO>                    break;
AO>                }
AO>                case 1007: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-8.png"));
AO>                    break;
AO>                }
AO>                case 1008: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-9.png"));
AO>                    break;
AO>                }
AO>                case 1009: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-10.png"));
AO>                    break;
AO>                }
AO>            }


Красота.

AO>Все работает ОК. Однако, когда я редактирую ветку или лист, то в режиме редактирования, показывается стандартная иконка.

AO>Как можно сделать, чтобы при редактировании также отображалась та иконка, которая мне необходима

TreeCellEditor
Re: Иконка в JTree в режиме редактирования
От: aliks-os  
Дата: 23.06.09 08:13
Оценка:
Хм, спасибо за подсказку. Хотя в принципе я обходился встроенным...
Попробую сейчас его написать
Re: Иконка в JTree в режиме редактирования
От: Nicht Россия  
Дата: 23.06.09 12:02
Оценка:
Здравствуйте, aliks-os, Вы писали:

AO>
AO>            switch (nodeInfo.type) {
AO>                case 0:    {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-2.png"));
AO>                    break;
AO>                }
AO>                case 1001: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-4.png"));
AO>                    break;
AO>                }
AO>                case 1002: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-5.png"));
AO>                    break;
AO>                }
AO>                case 1003: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/900-4.png"));
AO>                    break;
AO>                }
AO>                case 1004: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-3.png"));
AO>                    break;
AO>                }
AO>                case 1005: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-6.png"));
AO>                    break;
AO>                }
AO>                case 1006: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-7.png"));
AO>                    break;
AO>                }
AO>                case 1007: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-8.png"));
AO>                    break;
AO>                }
AO>                case 1008: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-9.png"));
AO>                    break;
AO>                }
AO>                case 1009: {
AO>                    icon  = new javax.swing.ImageIcon(getClass().getResource("/db/resources/883-10.png"));
AO>                    break;
AO>                }
AO>            }
AO>


Могу только сказать что создавать иконки в рендерере — это мракобесие. Ну и switch довольно спорный. Если ты вдруг не понял сарказма Blazkowicz.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.