Зажим,
У вас был успех с этим?Я хотел сделать то же самое, и мне было трудно заставить 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()));