Значок узла дерева исчезает, когда я нажимаю на него

/* когда я щелкаю узел дерева (например, выбран WEBLOGIC), значок узла исчезает, но появляются другие значки (не выбраны). Пожалуйста, помогите мне решить эту проблему. Это программа на основе свинга */

class ColorRenderer extends DefaultTreeCellRenderer
{
  public ColorRenderer()
  {
    super();
  }

  public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)
  {
    try
    {
      Component cell = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
      RTGTreeNode treeNode = (RTGTreeNode) value;
      GraphUniqueKeyDTO graphUniqueKeyDTO = treeNode.getGraphUniqueKeyDTO();

      /*Default Icon not needed.*/
      setIcon(null);

      if (graphUniqueKeyDTO == null)
      {
        return cell;
      }

      String nodeName = treeNode.toString();

      if (!leaf)
      {
        cell.setFont(NSColor.mediumPlainFont());
        if (selected)
        {
          cell.setForeground(Color.black);
          cell.setBackground(new Color(128, 0, 0));
        }
        else
        {
          Color color = treeNode.getNodeColor();

          if (treeNode.getTreeViewToolTip() != null)
            nodeName = treeNode.getTreeViewToolTip();
          openIcon = treeNode.getImgIcon();
          if(openIcon!=null){
              setIcon(openIcon);
              setLeafIcon(openIcon);

          }


          if(color == null)
            cell.setForeground(NSColor.leftPaneGroupTitleColor());
          else
            cell.setForeground(color);
        }
      }
      else
      {
        cell.setFont(NSColor.smallPlainFont());
        if (selected)
        {
          cell.setForeground(Color.black);
          cell.setBackground(new Color(128, 0, 0));
        }
        else
        {
          cell.setForeground(NSColor.leftPaneGraphTitleColor());
        }
      }

      setToolTipText(nodeName);
      JLabel currentCell = (JLabel) cell;
      currentCell.setHorizontalAlignment(JLabel.CENTER);
      return cell;
    }
    catch (Exception ex)
    {
      Log.errorLog("ColorRenderer", "getTreeCellRendererComponent", "", "", "Exception - " + ex);
      return null;
    }
  }

1 ответ

Решение

Узел в дереве может иметь пользовательский значок, но большинство скинов имеют дополнительную папку, например значок, рядом с теми узлами в дереве, которые содержат дочерние элементы. Я думаю, что вы имеете в виду значок папки рядом с узлом исчезает, когда вы нажимаете на него. Если дерево спрашивает модель, есть ли у него дочерние элементы, и модель возвращает значение true, отображается значок. Когда вы нажимаете на узел, а дочерние элементы отсутствуют, дерево удаляет значок.

Это произойдет, если вы не реализовали метод getChildren и isLeaf или неправильно внедрили isLeaf. Метод isLeaf говорит пользовательскому интерфейсу JTree рисовать или не рисовать значок папки. Также убедитесь, что setAsksAllowsChildren() имеет правильное значение для ваших нужд, а getChildCount() возвращает правильное значение для каждого узла.

Другие вопросы по тегам