Java Swing: добавить пользовательскую графическую кнопку к элементу JTree - PullRequest
4 голосов
/ 18 августа 2010

Я хотел бы добавить дополнительную кнопку с маленьким значком справа от элемента в JTree. это можно сделать? если да, то как?

спасибо!

Ответы [ 4 ]

4 голосов
/ 22 сентября 2010

Зажим,

У вас был успех с этим?Я хотел сделать то же самое, и мне было трудно заставить JButton ответить пользователю.Настройка средства визуализации для отображения кнопки прошла гладко, но все события мыши обрабатывались самой JTree и не передавались моей кнопке.

Наконец-то я нашел решение и решил опубликовать его здесь, чтобы другие могли прокомментировать (может быть, есть лучший способ?)

В дополнение к своему пользовательскому средству визуализации я также создал пользовательскоередактор, расширяющий DefaultTreeCellEditor.Мой пользовательский рендерер передается в пользовательский редактор через конструктор.В редакторе я переопределяю isCellEditable, чтобы вернуть true, и я переопределяю getTreeCellEditorComponent, чтобы вернуть renderer.getTreeCellRendererComponent.Это был ключ.Он возвращает компонент рендеринга, поэтому все клики передаются на мою панель в моем пользовательском рендерере, и мой JButton затем нормально реагирует на события действия.

Вот мой редактор:

public class MyTreeCellEditor extends DefaultTreeCellEditor  {

public MyTreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer) {
    super(tree, renderer);
}

public Component getTreeCellEditorComponent(JTree tree, Object value,
        boolean isSelected, boolean expanded, boolean leaf, int row) {
    return renderer.getTreeCellRendererComponent(tree, value, true, expanded, leaf, row, true);
}

public boolean isCellEditable(EventObject anEvent) {
    return true; // Or make this conditional depending on the node
}

}

В вашем дереве обязательно установите свой собственный редактор:

myTree.setCellEditor(new MyTreeCellEditor(myTree, (DefaultTreeCellRenderer) myTree.getCellRenderer()));
1 голос
/ 18 августа 2010

Из JTree Javadoc:

Чтобы использовать JTree для отображения составных узлов (например, узлов, содержащих как графический значок, так и текст), подкласс javax.swing.tree.TreeCellRenderer и setCellRenderer, чтобы сообщитьдерево, чтобы использовать его.

Составной узел это то, что вы хотите.Вы должны реализовать один метод, который будет возвращать объект Composite, который в вашем случае представляет собой небольшую панель, содержащую кнопку и метку рядом.

1 голос
/ 18 августа 2010

Вам потребуется CustomCellRenderer, который реализует TreeCellRenderer, и прикрепите его к JTree.

В вашем CustomCellRenderer вы можете поместить кнопку и значок.

JTree tree = new JTree(rootVector);
TreeCellRenderer renderer = new CustomCellRenderer();
tree.setCellRenderer(renderer);

Проверьте этот пример: (ссылка вышекод отсюда)

http://www.java2s.com/Code/Java/Swing-JFC/TreeCellRenderer.htm

1 голос
/ 18 августа 2010

Вы можете добавить TreeCellRenderer к вашему JTree. Этот рендерер может отображать иконку на каждом элементе дерева.

...