Значок узла дерева исчезает, когда я нажимаю на него
/* когда я щелкаю узел дерева (например, выбран 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() возвращает правильное значение для каждого узла.