gpt4 book ai didi

java - 从 JTreeTable SwingX 错误中删除选定的节点

转载 作者:行者123 更新时间:2023-12-01 11:51:26 26 4
gpt4 key购买 nike

当我尝试从 JTreeTable 中删除选定的节点时,出现了一个奇怪的错误。首先,我从 JXtreeTable 的主类中获取选定的行

table.getSelectedRow()

我使用此方法执行此操作,它返回了正确的行数。但随后,糟糕的事情发生了。在我的模型类中,我调用方法删除子项:

    package JTreeTable;

import org.jdesktop.swingx.treetable.AbstractMutableTreeTableNode;
import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;
import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
import org.jdesktop.swingx.treetable.MutableTreeTableNode;
import org.jdesktop.swingx.treetable.TreeTableModel;

public class TableModel extends DefaultTreeTableModel implements TreeTableModel {


DefaultMutableTreeTableNode root;// = new DefaultMutableTreeTableNode("Root");

public TableModel(DefaultMutableTreeTableNode root){
super(root);//it didnt work without this line. it took me a day to figure it out. I hate my life sometimes.
this.root = root;

}

public int getColumnCount()
{
return 4;
}

@Override
public String getColumnName( int column )
{
switch( column )
{
case 0: return "Description";
case 1: return "Amount";
case 2: return "Date";
case 3: return "Paid";

default: return "Unknown";
}
}

public void addChildren(){
int rootChildCount = root.getChildCount();
ArrayNode newChild = new ArrayNode(new Object[] {"dfds", "sfddsf","dfsfsd","fdsfsd"});
this.insertNodeInto(newChild, root, rootChildCount);
}

public void removeChildren(int index){
//root.remove(index);
System.out.println(root.getChildCount());

}

}

这是我的节点类:

package JTreeTable;

import org.jdesktop.swingx.treetable.AbstractMutableTreeTableNode;
import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;

public class ArrayNode extends DefaultMutableTreeTableNode {

public ArrayNode(Object[] data) {
super(data);
}

@Override
public Object getValueAt(int column) {
return getUserObject()[column];
}

@Override
public void setValueAt(Object aValue, int column) {
getUserObject()[column] = aValue;
}

@Override
public int getColumnCount() {
return 4;
}

@Override
public Object[] getUserObject() {
return (Object[]) super.getUserObject();
}

@Override
public boolean isEditable(int column) {
return true;
}

}

因此,当我使用方法 root.remove(index) 时,我总是收到错误“节点必须是此模型管理的有效节点”。但我很确定我的节点没问题!这意味着什么以及可以修复吗?

最佳答案

您正尝试绕过 TreeTableModel 直接从另一个节点删除子节点。使用 DefaultTreeTableModel.removeNodeFromParent,例如:

public void removeChildren(int index) {
MutableTreeTableNode node = root.getChildAt(index);
this.removeNodeFromParent(node);
}

关于java - 从 JTreeTable SwingX 错误中删除选定的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28798325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com