I need to use my own cell rendering for my JTree to add JLabel to each cell. And then let the user click these labels without having to select a cell first.
So, I created a Renderer that returns a JPanel that contains the DefaultTreeCellRenderer and 2 JLabel.
public class TreeNodeRenderer extends DefaultTreeCellRenderer implements TreeCellRenderer { private JPanel panel1 = new JPanel(); private JLabel delete = new JLabel(""); private JLabel upload = new JLabel(""); public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
Then I created an editor to allow the user to click on these labels thanks to MouseListener. Everything works well, except that the user must select a cell before clicking on the shortcut. I tried to return "false" using the "ShouldSelectCell" method, but it does not work.
Does anyone know why?
Here's the editor:
public class TreeNodeEditor extends AbstractCellEditor implements TreeCellEditor { private TreeNodeRenderer renderer; public TreeNodeEditor(TreeNodeRenderer treeRenderer) { this.renderer = treeRenderer;
EDIT - here is SSCCE:
import java.awt.Color; import java.awt.Component; import java.awt.Cursor; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.EventObject; import javax.swing.AbstractCellEditor; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTree; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.event.CellEditorListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeCellEditor; import javax.swing.tree.TreeCellRenderer; public class EditJTreeCell extends JFrame { private static final long serialVersionUID = 4745146614430249610L; private JTree tree; private DefaultTreeModel treeModel; private DefaultMutableTreeNode root; public EditJTreeCell() { super("Sample"); root = new DefaultMutableTreeNode("Root folder"); treeModel = new DefaultTreeModel(root); tree = new JTree(treeModel); TreeNodeRenderer renderer = new TreeNodeRenderer(); tree.setCellRenderer(renderer); tree.setCellEditor(new TreeNodeEditor()); tree.setEditable(true);
java editor swing jtree
bldcoco
source share