Hallo,
das TreeModel wird richtig dargestellt, wenn der JTree initialisiert wird. Jedoch funktioniert es nicht Blätter zu löschen oder zu adden. Ich schicke ein TreeModelEvent los, jedoch passiert nichts und ich komm dem Fehler einfach nicht auf die Spur. So hier erstmal der Code.
Gruß
dwn8
das TreeModel wird richtig dargestellt, wenn der JTree initialisiert wird. Jedoch funktioniert es nicht Blätter zu löschen oder zu adden. Ich schicke ein TreeModelEvent los, jedoch passiert nichts und ich komm dem Fehler einfach nicht auf die Spur. So hier erstmal der Code.
Code:
public class AccountTreeModel extends AbstractTreeModel implements Serializable {
private static final long serialVersionUID = -2517899978776523557L;
List<Account> accountList;
public AccountTreeModel() {
accountList = new ArrayList<Account>();
}
public AccountTreeModel(Map<String, Account> accountData) {
this();
setData(accountData);
}
public void setData(Map<String, Account> accountData) {
for ( Map.Entry<String, Account> e : accountData.entrySet() ) {
accountList.add(e.getValue());
}
}
@Override
public Object getChild(Object parent, int index) {
return accountList.get(index);
}
@Override
public int getChildCount(Object parent) {
return accountList.size();
}
@Override
public int getIndexOfChild(Object parent, Object child) {
int result = -1;
if (child instanceof Account) {
Account account = (Account) child;
for (int i = 0; i < accountList.size(); i++) {
if (accountList.get(i).equals(account)) {
result = i;
break;
}
}
}
return result;
}
@Override
public Object getRoot() {
return accountList;
}
@Override
public boolean isLeaf(Object node) {
return (node instanceof Account);
}
@Override
public void valueForPathChanged(TreePath path, Object newValue) {
}
public void add(Account account) {
accountList.add(account);
Account[] accountToAdd = {account};
TreePath path = new TreePath(getRoot());
int[] addedAccountIndex = {getIndexOfChild(null,account)};
System.out.println(getIndexOfChild(null,account));
TreeModelEvent event = new TreeModelEvent(this, path, addedAccountIndex, accountToAdd);
fireTreeNodesInserted(event);
}
public void remove(Account account) {
Account[] accountToRemove = {account};
TreePath path = new TreePath(getRoot());
int[] addedAccountIndex = {getIndexOfChild(null, account)};
accountList.remove(account);
TreeModelEvent event = new TreeModelEvent(this, path, addedAccountIndex, accountToRemove);
fireTreeNodesRemoved(event);
}
}
Code:
public abstract class AbstractTreeModel extends TreeModelSupport implements TreeModel {
}
Code:
public class TreeModelSupport {
private List<TreeModelListener> list = new ArrayList<TreeModelListener>();
public void addTreeModelListener( TreeModelListener listener ) {
if ( listener != null && !list.contains( listener ) ) {
list.add( listener );
}
}
public void removeTreeModelListener( TreeModelListener listener ) {
if ( listener != null ) {
list.remove( listener );
}
}
public void fireTreeNodesChanged( TreeModelEvent e ) {
Enumeration<TreeModelListener> listeners = Collections.enumeration(list);
while ( listeners.hasMoreElements() ) {
TreeModelListener listener = (TreeModelListener)listeners.nextElement();
listener.treeNodesChanged( e );
}
}
public void fireTreeNodesInserted( TreeModelEvent e ) {
Enumeration<TreeModelListener> listeners = Collections.enumeration(list);
while ( listeners.hasMoreElements() ) {
TreeModelListener listener = (TreeModelListener)listeners.nextElement();
listener.treeNodesInserted( e );
}
}
public void fireTreeNodesRemoved( TreeModelEvent e ) {
Enumeration<TreeModelListener> listeners = Collections.enumeration(list);
while ( listeners.hasMoreElements() ) {
TreeModelListener listener = (TreeModelListener)listeners.nextElement();
listener.treeNodesRemoved( e );
}
}
public void fireTreeStructureChanged( TreeModelEvent e ) {
Enumeration<TreeModelListener> listeners = Collections.enumeration(list);
while ( listeners.hasMoreElements() ) {
TreeModelListener listener = (TreeModelListener)listeners.nextElement();
listener.treeStructureChanged( e );
}
}
}
Gruß
dwn8