tree.py
#!/usr/bin/jython
# tree.py -- demo of JTree in Jython
import java.lang
import javax.swing
import javax.swing.tree
import javax.swing.event
import java.util
import java.awt
import java.awt.event
def makeSampleTree():
"""Create some data for our tree."""
data = \
["World",
[ "Canada",
[ "Ontario",
[ "London", ],],
[ "Quebec",
[ "Montreal", ],],
[ "Newfoundland",],
[ "Labrador",],
[ "Nova Scotia",
[ "Halifax", ],],
[ "Saskatchewan",],
[ "British Columbia",],
[ "Manitoba",],
[ "Yukon",], ],
[ "USA",
[ "Delaware",
[ "Wilmington", ],
[ "Newark", ],
[ "Dover", ],
[ "Georgetown", ], ],
[ "Maryland",
[ "Annapolis", ],
[ "Baltimore", ],
[ "Frederick", ],
[ "Havre de Grace", ],
[ "Elkton", ], ],
[ "Virginia",
[ "Richmond", ],
[ "Roanoke", ], ],
[ "Pennsylvania",
[ "Pittsburgh", ],
[ "Harrisburg", ],
[ "Philadelphia", ], ],
[ "New Jersey",
[ "Trenton", ],
[ "Cherry Hill", ],
[ "Newark", ],
[ "Piscataway", ],
[ "New Brunswick", ], ],
[ "Maine",
[ "Portland", ],
[ "Kennebunkport", ], ],
[ "Connecticut",
[ "Hartford", ], ],
[ "Idaho",
[ "Sandpoint", ],
[ "Idaho Falls", ],
[ "Coeur d'Alene", ], ],
[ "Washington",
[ "Seattle", ],
[ "Spokane", ], ],
[ "Colorado",
[ "Denver", ],
[ "Breckenridge", ],
[ "Vail", ],
[ "Boulder", ],
[ "Fort Collins", ],
[ "Colorado Springs", ], ],
[ "Montana", ],
[ "Nevada", ],
[ "Hawaii", ], ],
[ "Germany",
[ "Schleswig-Holstein", [ "Kiel", ], ], ], ]
tfunc = javax.swing.tree.DefaultMutableTreeNode
root = tfunc(data[0])
root.setAllowsChildren(1)
for crec in data[1:]:
country = tfunc(crec[0])
root.add(country)
country.setAllowsChildren(1)
for srec in crec[1:]:
state = tfunc(srec[0])
country.add(state)
state.setAllowsChildren(1)
for lrec in srec[1:]:
city = tfunc(lrec[0])
state.add(city)
city.setAllowsChildren(0)
return root
def exit(event):
"""Exit the JVM."""
java.lang.System.exit(0)
def delAction(e):
global model,mytree
selNode = mytree.getLastSelectedPathComponent()
if selNode is None or selNode.getParent() is None:
return
model.removeNodeFromParent(selNode)
def enumAction(e):
global model,mytree
selNode = mytree.getLastSelectedPathComponent()
if selNode is None:
return
print "\nEnumerating..."
x = model.getPathToRoot(selNode)
level = len(x)
pot = selNode.preorderEnumeration()
while pot.hasMoreElements():
tn = pot.nextElement()
x = model.getPathToRoot(tn)
blanks = " "*40
print blanks[:3*(len(x)-level)],tn
def vchange(e):
global model,mytree
tp = mytree.getSelectionPaths()
if tp is None:
return
print "\nTree selections(s):"
for path in tp:
print " ",path
# ----------------------------------------------------------------------
win = javax.swing.JFrame("Tree demo", \
size=(200,500),windowClosing=exit)
root = makeSampleTree()
model = javax.swing.tree.DefaultTreeModel(root)
model.setAsksAllowsChildren(1);
mytree = javax.swing.JTree(model,valueChanged=vchange)
s = javax.swing.JScrollPane(mytree)
win.contentPane.add(s,java.awt.BorderLayout.CENTER)
panel2 = javax.swing.JPanel()
enumButton = javax.swing.JButton("Enumerate",actionPerformed=enumAction)
delButton = javax.swing.JButton("Delete",actionPerformed=delAction)
exitButton = javax.swing.JButton("Exit",actionPerformed=exit)
panel2.add(enumButton)
panel2.add(delButton)
panel2.add(exitButton)
win.contentPane.add(panel2,java.awt.BorderLayout.SOUTH)
win.pack()
win.show()