Tag: jtree

存储jtree的状态/扩展节点以恢复状态

我正在和JTree合作。 我想知道什么是最好的方法来了解在JTree中扩展哪些节点以便保存其状态(即保存所有扩展路径)。 因此,如果我调用model.reload() ,Jtree将不会保持折叠状态,但我将能够将其原始状态恢复到用户,即,将扩展所有扩展节点。

JTree将节点背景设置为非不透明

请看一下SSCCE。 如何使未选择的树节点的背景透明。 目前,未选择节点的背景为白色。 但是,我的单元格渲染器应该将其绘制为非透明(如果未选中)(选择时为绿色……它的作用)。 最后,我希望未选择的节点只是没有背景的文本,因为SSCCE中红色的区域在我的应用程序中有一个渐变填充。 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; public class SimpleTree extends JFrame { public static void main(final String[] args) { new SimpleTree(); } public SimpleTree() { super(“Creating a Simple JTree”); final Container content = this.getContentPane(); content.setBackground(Color.RED); final Object[] hierarchy […]

Java JTree只扩展一级节点

使用JTree,假设根节点为0级,并且根目录下可能最多有5个级别,如何轻松扩展所有1级节点,以便所有1级和2级分支和叶子都可见但3级及以下都没有?

从JTree Transferable TransferHandler复制粘贴

我正在探索如何实现JTree的Copy和Paste 。 因为,我希望从DefaultMutableTreeNode复制像toString()一样粘贴到另一个应用程序,如Sublime Text。 我正在查看代码,以便查看如何实现复制和粘贴以及如何在JTree中使用拖放 。 我的第一个问题是,必须测试JTree DefaultMutableTreeNode之间的复制和粘贴,以后如何从剪贴板粘贴到另一个应用程序,但是我的代码不能正常工作并且不知道为什么会失败,我需要解决。 注意 :对不起,我的代码有点长,因为如果我只放一个代码片段则不起作用。 对我来说,这里的所有代码都需要进行测试。 这是我的代码: import java.awt.*; import java.awt.datatransfer.*; import java.awt.event.ActionEvent; import java.util.*; import javax.swing.*; import javax.swing.tree.*; public class JTreeTransferHandler extends JFrame { public JTreeTransferHandler() { initiate(); } private void initiate() { setTitle(“Copy from JTree”); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400,400); setLocation(200,200); setVisible(true); DefaultMutableTreeNode root = new DefaultMutableTreeNode(“Root”); DefaultMutableTreeNode vegetableNode = new […]

如何在jtree中重命名节点

我创建了一个Jtree,它的所有节点都有User对象,我通过ItemInfo类填充用户对象,现在我的问题是重命名节点。 我可以编辑我的节点但是因为我尝试找到我的UserObject,当我按下F2并重命名我的节点时,我看到了我的UserObject! 所以现在我想知道我应该手动触摸用我以前的名字替换我的节点新名称的位置? 我想我需要编写自己的DefaultTreeCellRenderer类,请指教我…(如果是的话,我的参考是什么例子) public class ItemInfo { public String Name; public String Value; public long ValueID; public ItemInfo(String Name, String Value) { this.Name = Name; this.Value = Value; } public ItemInfo(String Name, long ValueID) { this.Name = Name; this.ValueID = ValueID; } public String toString() { return Name; } public String getValue() { return […]

JTree:如何获取所有项目的文本?

我想以格式获取JTree的文本: root sudir1 node1 node2 subdir2 node3 node4 可能吗? 我写了一些代码 public static String getLastSelectedText(JTree tree) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if (node == null) return null; return node.getUserObject().toString(); } 但它只获得选定的组件文本。 我想扩展树并处理所有节点,但也许这是个坏主意。

像JTreeTable这样的表,包含可编辑的组件,如ComboBox,TextArea,CheckBox as Rows

在java中是否有任何自定义插件(如带有可编辑java组件的JTreeTable),如上图所示。 我知道这可以通过扩展JTreeTable或JXTreeTable类或使用TreeCellEditor等来完成……但是,我需要一个非常精确的结构,如上图所示,请指导我并提前致谢。

渲染时更改JTree行高resize的行为

我想只在节点是SELECTED时使用包含三个文本字段的自定义TreeCellRenderer,而在节点未选择时使用默认渲染器。 问题是虽然我为面板设置了合适的首选大小和最小大小,但JTree不会更新编辑的行高。 相反,当我使用相同的面板作为编辑器时,它被正确呈现。 有人可以解释为什么会这样吗? 是否有推荐的方法来实现类似于编辑的渲染大小调整行为? JTree是否提供了直接设置它的方法,还是有必要扩展JTree或(更糟)L&F? 注意:在深入研究BasicTreeUI.startEditing(TreePath path, MouseEvent event)方法后,我注意到以下几行代码。 他们似乎负责编辑大小调整: if(editorSize.width != nodeBounds.width || editorSize.height != nodeBounds.height) { // Editor wants different width or height, invalidate // treeState and relayout. editorHasDifferentSize = true; treeState.invalidatePathBounds(path); updateSize(); // To make sure x/y are updated correctly, fetch // the bounds again. nodeBounds = getPathBounds(tree, path); } else […]

Swing问题/ JTree /自定义树模型

我有一个问题和希望,有人知道出了什么问题,为什么并能够给我解释我现在错过的东西,让那件事情按照建议工作。 我有一个基于自定义TreeModel的JTree(“WRTreeModel”,见下文)。 该模型应用于的数据结构是包含一些字段的根对象的构建,以及由下面所示的“ArrayListModel”支持的列表。 当我使用WRTreeModel构建它时,树看起来很好。 我能够展开和折叠表示对象中包含的列表和字段的节点。 我可以展开和折叠这些列表并查看其内容等等。 现在我想删除其中一个列表的子节点 – 正如我所知 – 通过从调用ArrayListModel的remove方法的模型中删除它来实现它。 为了使WRTreeModel知道删除,首先要调用它的fireIntervalRemoved方法被调用,到目前为止一直这么好。 在WRTreeModels内部类ArrayModelListener中,intervalRemoved方法准备fireTreeNodesRemoved的调用,然后构建一个TreeEvent,该TreeEvent被转发到所有已注册的TreeModelListeners(因此当它连接到模型时,它自动注册自己的JTree)。 现在我希望树能够反映变化并更新它的内部和视觉表示以显示新状态。 不幸的是,这似乎并没有这样做。 有事情发生。 但是,当我点击节点时,我刚刚更改了一些EventHandler-Exceptions被抛出。 显然有些事情真的很混乱。 我知道在飞行中回答这样的问题并不容易,但我真的很感激快速回答。 如果有人知道网站解释使用自定义树模型(不是在DefaultMutableTreeNode或任何给定的基于实现的类)以及JTree的事件处理和更新如何工作,那也会有所帮助。 最诚挚的问候, 托马斯艺术 public class ArrayListModel extends ArrayList implements ListModel { … public E remove(int index) { fireIntervalRemoved(index, index); E removedElement = super.remove(index); return removedElement; } … } public class WRTreeModel extends LogAndMark implements TreeModel { […]

实现JTree工具提示的最佳方法是什么?

由于JTree和TreeModel不提供开箱即用的工具提示,您如何看待,为JTree提供特定于项目的工具提示的最佳方法是什么? 编辑:(之后回答我自己的问题。) @Zarkonnen:感谢getTooltipText的想法。 我发现了覆盖DefaultTreeCellRenderer的另一种方式(可能还是更好一点)并且想要分享它: public class JTreeWithToolTips { private static class OwnRenderer extends DefaultTreeCellRenderer { @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { setToolTipText(“foobar” + row); return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); } } public static void main(String[] args) { JTree tree = […]