У меня возникла странная ошибка, когда я пытаюсь удалить выбранный узел из JTreeTable. Прежде всего, я выбран ряд в моем главном классе от JXtreeTableУдалить выбранный узел из JTreeTable SwingX error
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 (индекс) я всегда получаю ошибку «узел должен быть допустимым узлом, управляемым этой моделью ». Но я уверен, что мои узлы в порядке! Что это значит и можно ли это сделать?
Да, я сделал что-то подобное в своей программе. Вы как-то опаздываете здесь: D Но вы правы, поэтому я принимаю его в любом случае, наслаждаюсь вашей новой репутацией: D – Ophelia
Я просто наткнулся на ваш вопрос, имея такую же проблему, и я думаю, что я не последний, кто нашел это SO вопрос, поэтому я думал, что могу ответить на него в любом случае. :-) – andreas