Событие, хотя JLabel
расширяет java.awt.Container
, я не думаю, что вы можете использовать его как JPanel
.
Средство визуализации ячеек дерева должно реализовывать интерфейс javax.swing.tree.TreeCellRenderer
. Не нужно расширять DefaultTreeCellRenderer
. Также обратите внимание, что JTree
будет использовать один и тот же экземпляр средства визуализации для визуализации всех узлов дерева.
Приведенный ниже код является вашим кодом, но с другим средством визуализации ячеек дерева. Он создает один JButton
, и эта кнопка отображается для каждого узла дерева.
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellRenderer;
import java.awt.Component;
import java.awt.Dimension;
public class TreeDemo{
TreeDemo(){
JFrame jFrame = new JFrame("TreeDemo");
DefaultMutableTreeNode rootNode = initNodes();
JTree jTree = new JTree(rootNode);
jTree.setCellRenderer(new ButtonRenderer());
jFrame.getContentPane().add(jTree);
jFrame.setMinimumSize(new Dimension(400, 300));
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
}
DefaultMutableTreeNode initNodes(){
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
DefaultMutableTreeNode sub1 = new DefaultMutableTreeNode("sub1");
DefaultMutableTreeNode sub2 = new DefaultMutableTreeNode("sub1");
DefaultMutableTreeNode sub1_1 = new DefaultMutableTreeNode("sub1_1");
DefaultMutableTreeNode sub1_2 = new DefaultMutableTreeNode("sub1_2");
DefaultMutableTreeNode sub2_1 = new DefaultMutableTreeNode("sub2_1");
DefaultMutableTreeNode sub2_2 = new DefaultMutableTreeNode("sub2_2");
root.add(sub1);
root.add(sub2);
sub1.add(sub1_1);
sub1.add(sub1_2);
sub2.add(sub2_1);
sub2.add(sub2_2);
return root;
}
public static void main(String[] args) {
new TreeDemo();
}
}
class ButtonRenderer implements TreeCellRenderer {
private JButton button;
public ButtonRenderer() {
button = new JButton("Button");
}
@Override
public Component getTreeCellRendererComponent(JTree tree,
Object value,
boolean selected,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
return button;
}
}
А вот снимок экрана работающего приложения ...
![tree demo](https://i.stack.imgur.com/49tPg.png)