修改 JTree 节点外观
Modify JTree nodes appearance
我正在尝试将 JTree 节点可视化为 JButton,我已经尝试使用 Jbutton 对象创建 DefaultMutableTreeNode
并将其添加到 JTree:
JButton button = new JButton("Thing");
DefaultMutableTreeNode root = new DefaultMutableTreeNode(button);
JTree alberoClassi = new JTree(root);
这些只显示带有黑色参数的错误行。
在网上搜索我只发现我需要一个 TreeRendererCell
class,但是 none 的结果显示了如何使用它。
是否有一些教程可以让我找到一些示例来完成任务?
最后我设法使用实现了 javax.swing.tree.TreeCellRenderer
接口的外部 class 解决了这个问题。
public class ClassCellRenderer implements javax.swing.tree.TreeCellRenderer {
JLabel className = new JLabel(" ");
JButton renderer = new JButton();
DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer();
public ClassCellRenderer() {
renderer.add(className);
}
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
Component returnValue = null;
if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
if (userObject instanceof String) {
String e = (String) userObject;
className.setText(e);
}
returnValue = renderer;
}
if (returnValue == null) {
returnValue = defaultRenderer.getTreeCellRendererComponent(tree, value, selected, expanded,
leaf, row, hasFocus);
}
return returnValue;
}
}
JLabel 和 JButton 可以更改为需要的任何其他组件。
为了将渲染器添加到树中,我使用了这些行:
alberoClassi = new JTree(root);
TreeCellRenderer renderer = new ClassCellRenderer();
alberoClassi.setCellRenderer(renderer); //aggiunta del renderer per i nodi
我正在尝试将 JTree 节点可视化为 JButton,我已经尝试使用 Jbutton 对象创建 DefaultMutableTreeNode
并将其添加到 JTree:
JButton button = new JButton("Thing");
DefaultMutableTreeNode root = new DefaultMutableTreeNode(button);
JTree alberoClassi = new JTree(root);
这些只显示带有黑色参数的错误行。
在网上搜索我只发现我需要一个 TreeRendererCell
class,但是 none 的结果显示了如何使用它。
是否有一些教程可以让我找到一些示例来完成任务?
最后我设法使用实现了 javax.swing.tree.TreeCellRenderer
接口的外部 class 解决了这个问题。
public class ClassCellRenderer implements javax.swing.tree.TreeCellRenderer {
JLabel className = new JLabel(" ");
JButton renderer = new JButton();
DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer();
public ClassCellRenderer() {
renderer.add(className);
}
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
Component returnValue = null;
if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
if (userObject instanceof String) {
String e = (String) userObject;
className.setText(e);
}
returnValue = renderer;
}
if (returnValue == null) {
returnValue = defaultRenderer.getTreeCellRendererComponent(tree, value, selected, expanded,
leaf, row, hasFocus);
}
return returnValue;
}
}
JLabel 和 JButton 可以更改为需要的任何其他组件。 为了将渲染器添加到树中,我使用了这些行:
alberoClassi = new JTree(root);
TreeCellRenderer renderer = new ClassCellRenderer();
alberoClassi.setCellRenderer(renderer); //aggiunta del renderer per i nodi