【发布时间】:2012-02-09 22:33:11
【问题描述】:
我有一个 XML 文件,我想在树中直观地表示它。如果我要这样做,我将不得不使用 Jython,而且我们的系统上只有 2.5.0 版本。我没有 Java 经验(并且很难阅读它),但有一点 Swing 经验(通过 Jython)并且听说我可以使用 JTree() 来做到这一点。我已经看到了一些 Java Swing 示例,但是有人知道 Jythonic 的方法吗?请注意,我只有某些 XML 解析器可用 - 我目前正在使用 xml.etree.ElementTree 中的那个。
编辑: 我试着模仿 Chui Tey 的例子,然后尝试了这个:
from java import awt
from javax import swing
from java.lang import System
from xml.etree import ElementTree
class XmlTreeModel(swing.tree.TreeModel):
def __init__(self, etree):
self.etree = etree
def getRoot(self):
return self.etree.getroot()
def getChildCount(self, object):
return len(object)
def getChild(self, parent, index):
return parent[index]
class Viewer(swing.JFrame):
def __init__(self):
super(Viewer, self).__init__()
def display(self, fileName):
xmlObject = ElementTree.parse(fileName)
xmlTreeModel = XmlTreeModel(xmlObject)
jTree = swing.JTree(xmlTreeModel)
self.contentPane.add(jTree)
self.contentPane.setPreferredSize( awt.Dimension(100, 200) )
self.setTitle("Tree")
self.pack()
self.setDefaultCloseOperation(swing.JFrame.DO_NOTHING_ON_CLOSE)
self.windowClosing = self.exit
self.setLocationRelativeTo(None)
self.setVisible(True)
def exit(self, event):
System.exit(0)
if __name__ == "__main__":
viewer = Viewer()
viewer.display('my.xml')
不幸的是,当它到达self.contentPane.add(xmlTreeModel) 时会引发一个异常,说
TypeError: add(): 1st arg can't be coerced to java.awt.PopupMenu, java.awt.Component
我不能简单地通过将其添加到内容窗格来对其进行测试吗?
编辑:它缺少一个 JTree。使用此修复更新了代码。
【问题讨论】: