我使用的是从数据库填充的JTree。
通过将根节点及其子节点设置为自定义对象,可以创建树:
private DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Categorias");
...
ResultSet primaryCategories = dbm.fetchAllCategories();
while (primaryCategories.next()){
Category category = new Category(primaryCategories.getLong("_id"),
primaryCategories.getString("category"));
DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(category);
rootNode.add(childNode);
ResultSet currentSubcategory = dbm.fetchChildSubcategories(category.getCatId());
while (currentSubcategory.next()){
Category subcategory = new Category(currentSubcategory.getLong("_id"),
currentSubcategory.getString("category"));
childNode.add(new DefaultMutableTreeNode(subcategory, false));
}
}
...
在这之后,树被完美地创造出来。使用类别对象填充,每个对象都有自己的ID号和名称,以便在toString()方法中使用。
当它被设置为可编辑时,问题就来了。一旦节点被重命名,类别节点也被转换成一个字符串对象,所以我不能更新新的类别名称值到数据库。
我试图用treeNodeChanged(TreeModelEvent e)
捕捉重命名事件,但userObject已更改为String对象,无法获取编辑对象的引用。
我能用什么方法解决这个问题?我是否应该有一个显示的树的副本和另一个从数据库下载的副本,并在每次发生更改时都进行升级?
*PD:*我还试图从覆盖方法的模型中捕获更改的节点:
public void nodeChanged(TreeNode newNode) {
DefaultMutableTreeNode parent = ((DefaultMutableTreeNode)newNode.getParent());
int index = getIndexOfChild(parent, newNode);
DefaultMutableTreeNode oldNode = (DefaultMutableTreeNode) getChild(parent, index);
System.out.println(parent.getUserObject().getClass().toString());
System.out.println(oldNode.getUserObject().getClass().toString());
}
这打印:
class com.giorgi.commandserver.entity.Category
class java.lang.String
所以这里的旧节点已经被更改为字符串,我已经完全失去了对旧类别及其ID的引用,所以我不能在数据库中更新它。
任何帮助都会来的。
最后的解决方案是,就像疯狂程序员说的那样:
public void valueForPathChanged(TreePath path, Object newValue) {
DefaultMutableTreeNode aNode = (DefaultMutableTreeNode)path.getLastPathComponent();
Category catNode = (Category) aNode.getUserObject();
catNode.setCategory((String) newValue);
catNode.updateFromDatabase();
nodeChanged(aNode);
}
好吧,那需要一点挖掘。
基本上,当编辑被“停止”时,JTree
将通过编辑器的getCellEditorValue
请求编辑器的值。然后通过valuesForPathChanged
方法将其传递给模型,该方法最终调用节点的setUserObject
方法。
您可能正在使用默认编辑器或基于文本字段的编辑器。这将返回一个字符串
值。
您需要做的是捕获对树节点的setUserObject
方法的更改,访问即将到来的值(即,检查它是否是String
)并根据需要进行更新。
问题内容: 我想在GO中将字符串数组转换为字节数组,以便可以将其写到磁盘上。将字符串数组()解码为字节数组()的最佳解决方案是什么? 我正在考虑对字符串数组进行两次迭代,第一个迭代以获得字节数组所需的实际大小,然后第二个迭代写入每个元素的长度和实际字符串()。 解决方案必须能够以其他方式进行转换;从一个到一个。 问题答案: 让我们忽略一个事实,那就是走一秒钟。您需要做的第一件事是将序列化格式编组为
问题内容: 我正在使用以下代码从外部程序获取标准输出: 方法返回一个字节数组: 但是,我想将输出作为普通的字符串使用。这样我就可以像这样打印它: 我认为这就是方法的用途,但是当我尝试使用它时,我又得到了相同的字节数组: 如何将字节值转换回字符串?我的意思是,使用”batteries”而不是手动进行操作。我希望它与Python 3兼容。 问题答案: 你需要解码bytes对象以产生一个字符串:
问题内容: 我有一个必须解析的二进制文件,并且正在使用Python。有没有办法占用4个字节并将其转换为单个精度浮点数? 问题答案:
问题内容: 您好,我正在从Web服务获取一个字符串。 我需要解析此字符串并获取错误消息中的文本? 我的字符串如下所示: 仅分析字符串还是将其转换为xml然后进行分析是否更好? 问题答案: 我将使用Java的XML文档库。有点混乱,但是可以。
如何将字符串(字节字符串)转换为字节(字节字符串),而不必手动复制和粘贴字符串并在其前面放置b?