[英]JTree, cant add nodes
在指定行的下面的代码中,节点添加了有效的工作,而上面的syso行正常显示了表格。如果我将tables.add(new ...("blabla")
放在category.add(triggers);
行将起作用。
DefaultMutableTreeNode tables,procedures,functions,triggers;
public void loadConnections(){
for(Database db:SavedData.databases){
db.connect();
DefaultMutableTreeNode category = new DefaultMutableTreeNode(db.name);
((DefaultMutableTreeNode)(((DefaultTreeModel)treeConnections.getModel()).getRoot())).add(category);
tables = new DefaultMutableTreeNode("Tables");
procedures = new DefaultMutableTreeNode("Procedures");
functions = new DefaultMutableTreeNode("Functions");
triggers = new DefaultMutableTreeNode("Triggers");
category.add(tables);
category.add(functions);
category.add(procedures);
category.add(triggers);
}
treeConnections.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
TreePath tp = treeConnections.getPathForLocation(me.getX(), me.getY());
if (tp != null){
if(tp.getPathCount()==3){
String dbname=tp.getParentPath().getLastPathComponent().toString();
String function=tp.getLastPathComponent().toString();
Database db=SavedData.getConnection(dbname);
if(function.equals("Tables")){
new Thread(new Runnable() {
public void run() {
try{
ArrayList<String> tablesList=db.connectionInterface.getTables();
tables.removeAllChildren();
for(String table:tablesList){
System.out.println(table);
tables.add(new DefaultMutableTreeNode(table)); ->>>>>>>>>>>>>>>here
}
}catch(Exception ex){ex.printStackTrace();}
}
}).start();
}
}
}
}
});
}
正如copeg所说的,我尝试了DefaultTreeModel.inserNodeInto方法以及其他一些更改,并且该方法有效
DefaultMutableTreeNode tables,procedures,functions,triggers;
public void loadConnections(){
for(Database db:SavedData.databases){
db.connect();
DefaultMutableTreeNode category = new DefaultMutableTreeNode(db.name);
((DefaultMutableTreeNode)(((DefaultTreeModel)treeConnections.getModel()).getRoot())).add(category);
tables = new DefaultMutableTreeNode("Tables");
procedures = new DefaultMutableTreeNode("Procedures");
functions = new DefaultMutableTreeNode("Functions");
triggers = new DefaultMutableTreeNode("Triggers");
category.add(tables);
category.add(functions);
category.add(procedures);
category.add(triggers);
((DefaultTreeModel)treeConnections.getModel()).insertNodeInto(new DefaultMutableTreeNode("fyh"), tables, 0);
}
treeConnections.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
TreePath tp = treeConnections.getPathForLocation(me.getX(), me.getY());
if (tp != null){
if(tp.getPathCount()==3){
String dbname=tp.getParentPath().getLastPathComponent().toString();
String function=tp.getLastPathComponent().toString();
Database db=SavedData.getConnection(dbname);
if(function.equals("Tables")){
new Thread(new Runnable() {
public void run() {
try{
ArrayList<String> tablesList=db.connectionInterface.getTables();
DefaultTreeModel model = (DefaultTreeModel) treeConnections.getModel();
TreePath path = treeConnections.getNextMatch("Tables", 0, Position.Bias.Forward);
MutableTreeNode node = (MutableTreeNode) path.getLastPathComponent();
node.remove(0);
while(node.getChildCount()>0){
node.remove(0);
}
model.reload();
int index=0;
for(String table:tablesList){
MutableTreeNode newNode = new DefaultMutableTreeNode(table);
model.insertNodeInto(newNode, node,index++);
treeConnections.expandPath(path);
}
}catch(Exception ex){ex.printStackTrace();}
}
}).start();
}
}
}
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.