在Eclipse中打开XML时,内容可以像树结构一样显示
树被"嵌入"在表格中,内容显示在单独的列中.
这在Swing中复制非常好,不是专门针对XML内容,而是针对具有树结构的类似数据.
UPDATE
我刚刚了解了JTreeTable,但我真的需要在NetNeans中做到这一点.应该提一下,对不起.
有任何想法吗?
我在这一点上有点迷失:我尝试创建一个JTable,它能够在第一列中保存某种树(JTree?)数据结构,然后是基于其他列中的树节点的数据,如下所示图片:
该图像显示了我的JTree的结构.红线表示我需要实现的表结构.树中的每个节点应该像该表中的单行一样进行treatet等等.我希望我能够清楚地了解到我想要实现的目标.
我试过像这里讨论的那样:JTable作为一个JTree节点,这里把JTable放在JTree中,但这不符合我的需要.我还从SwingX项目中了解了JXTreeTable,但似乎很难找到任何有用的例子.此类解决方案的许多链接似乎导致(不再存在)sun网站和/或重定向到oracle网站......
如果有人可以引导我走向正确的方向和/或提供一些如何做到这一点的正常代码(右),这将是非常棒的.
任何帮助,将不胜感激 ;).
我有一个JTreeTable
并且已成功实现了MouseMotionListener
一个只要鼠标位于其中一个单元格上就显示工具提示.但是,单击单元格时,工具提示不会显示.我已经尝试过几样的事情,例如在事件mouseClicked
和mouseReleased
事件上设置文本,但这不起作用.我发现这个代码 -
Action toolTipAction = treeTable.getActionMap().get("postTip");
if(toolTipAction != null){
ActionEvent postTip = new ActionEvent(treeTable,ActionEvent.ACTION_PERFORMED, "");
toolTipAction.actionPerformed(postTip);
}
Run Code Online (Sandbox Code Playgroud)
在mouseReleased
方法中使用,它确实使用tooltip popup
,但它然后处于错误的位置.所以接下来我尝试重写getTooltipLocation
方法JTreeTable
,这对mouseMoved
事件很好,但不会用上面的方法调用.任何人都可以阐明如何做到这一点?
谢谢安迪
我正在使用JTreeTable
由我自己的模型支持的Sun示例的略微修改版本.这将是第三个例子(http://java.sun.com/products/jfc/tsc/articles/bookmarks/上的书签).
除拖放支持外,一切都按预期工作.我想DnD更像是JTree
提供的东西.由于JTreeTable
是扩展,JTable
它提供了JTable.DropLocation
用于确定丢弃位置的类,当将内容放入JTreeTable
(无路径和无子索引)的树呈现列时,该类不提供足够的信息.我已经通过创建一个DropLocation
基于它的组合JTable
和JTree
版本的自定义类来解决这个问题.我还修改了TreeTableCellRenderer
由上述JTreeTable
实现提供的类的paint方法,以向用户显示此新信息(她现在能够查看新节点是否将放置在所选节点内部,之前或之后,如果在内部树列,正如您所期望的那样a JTree
).
但是有一个问题.当在树列内呈现放置位置时,鼠标光标会变得疯狂.它出现然后在几毫秒后消失,或者这种情况发生得如此之快,甚至没有显示拖动光标.这也发生在未经修改的Sun的例子中.我完全不知道为什么会这样.在http://www.java.net/node/663106找到了另一个有同样问题的人,但是那里提供的解决方案似乎将组件的放置位置设置为null,并且无法再使用JTreeTable.getDropLocation()
方法检索.我需要这个将它转换为我的修改DropLocation
然后根据它绘制的东西.我非常接近我的用例的正确解决方案,我可以品尝它.这个光标闪烁的东西是我的唯一障碍.有任何想法吗?
使用Java 1.6.
PS:我已经决定使用自定义JTreeTable
而不是现有组件之一(如Netbeans Outline或者JXTreeTable
),因为它们似乎都遇到了JTable.DropLocation
问题,并且不支持在所选树节点之前或之后删除(仅在内部) ).如果你知道一个提供这种功能的组件,我会很高兴听到它.
我一直在寻找这个.我需要一个JTreeTable
支持变量行高的.具体来说,我希望显示顶级节点的行高于它们下面的子行.
我一直在使用JXTreeTable
基于原始Sun文章的SwingX实现().但是,它特别禁止变量行高,并且没有重写JXTree
我无法看到通过.
在我开始讨厌的事情之前,会感激地收到任何提示/指示......
我知道之前有人问这个问题,但我没有得到适当的解决方案.
我读到了大纲,但这与我想要的正好相反,即JTree
中的JTable我希望在JTable中显示数据,但它存储为不同的组,因此
当我花费一个组(节点)JTable时,这些组是JTree的节点显示该组.
我在oracle中阅读了这篇文章:在Swing中创建TreeTables:第1部分
这是相当陈旧的,不适用于我的java版本(我不知道为什么!),所以我
浏览了TreeTable的下一部分:在Swing中创建TreeTables:第2部分
整个代码比较新,因为它使用"javax.swing"代替
"com.sun.java.swing",但我遇到的问题是一个名为
"FileSystemModel2.java"的文件丢失了它是从以前的版本所以我不能
使用旧的.有一些方法添加到新的"FileSystemModel.java".如何通知
他们这个丢失的文件或如果你有不同的方法请告诉我.
我想要实现的目标如下图所示:
这张图片来自"LastPass",我想让我自己的密码管理器作为我的项目
所以请帮助我,我是如此接近,但我不能进一步.
使用本手册(http://www.comp.nus.edu.sg/~cs3283/ftp/Java/swingConnect/tech_topics/tables-trees/tables-trees.html)我正在尝试为我的项目创建树表摆动用户界面。
在我的表类的构造函数中,我重新定义了这样的渲染:
public class JTreeTable extends JTable {
public JTreeTable(ITreeTableModel treeTableModel) {
super();
...
setDefaultRenderer(ITreeTableModel.class, tree);
...
}
}
Run Code Online (Sandbox Code Playgroud)
其中 treeTableModel 是我的实现
interface ITreeTableModel extends TreeModel
Run Code Online (Sandbox Code Playgroud)
在结果表中看起来接近我想要的,但我有几个问题:
我的代码中的字段(ID)定义为对象,但实际上它代表数字(1、2、3 等)。如何更改字段 ID 的表示?
我的表中的节点不会扩展。但
public int getChildCount(Object parent_object_id)
返回数字 > 0
ps我知道可能没有足够的信息来直接回答,但我至少需要指导我可以继续我的调查。
我想实现一个 JTreeTable。我在java官方网站上看到了这个例子。我是java的初学者,我无法理解那个例子。我将树节点和子名称作为字符串。我该如何实施?
在java中是否有任何自定义插件(如带有可编辑java组件的JTreeTable),如上图所示.
我知道这可以通过扩展JTreeTable或JXTreeTable类或使用TreeCellEditor等来完成......但是,我需要一个非常精确的结构,如上图所示,请指导我并提前致谢.
有没有办法创建一个具有多个(我瞄准三个)级别的JList?
像这样的东西:
level 1 item
level 2 item
level 2 item
level 3 item
level 1 item
level 1 item
level 2 item
level 2 item
level 3 item
level 3 item
Run Code Online (Sandbox Code Playgroud)
我的程序中有(最多)三级组件GUI,我需要以某种方式使用户能够组织GUI的元素,将它们移到彼此之上或之下.
它可以用JList完成,还是有其他方法来处理这些事情?也许有些图书馆?
我有一个ftp程序,每次扩展时检索文件夹数据.它通过使用这样的模型来做到这一点:
private void FilesTreeTreeExpanded(javax.swing.event.TreeExpansionEvent evt) {
String path = new String("");
DefaultMutableTreeNode chosen = (DefaultMutableTreeNode) evt.getPath().getLastPathComponent();
String[] pathArray = evt.getPath().toString().replaceAll("]", "").split(",");
for (int i = 1 ; i < pathArray.length ; i++) path += "/"+ pathArray[i].trim();
Run Code Online (Sandbox Code Playgroud)
//我被选中了.removeAllChildren(); 没有成功ftp.GoTo(路径);
ArrayList listDir = null; listDir = ftp.ListDir(); ArrayList listFiles = null; listFiles = ftp.ListFiles(); DefaultMutableTreeNode child = null,dir = null,X = null; //这会将文件添加到树中(int i = 0; i <listFiles.size(); i ++){child = new DefaultMutableTreeNode(listFiles.get(i)); if(listFiles.size()> 0)model.insertNodeInto(child,selected,0); } //这将为列表添加dirs(int i = 0; i <listDir.size(); …
Run Code Online (Sandbox Code Playgroud)