我有一个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():第一个arg无法强制转换为java.awt.PopupMenu,java.awt.Component
我是否仅仅通过将其添加到内容窗格来测试它?
编辑:它错过了一个JTree。使用此修复程序更新了代码。答案 0 :(得分:0)
您需要通过子类化来实现javax.swing.tree.TreeModel。
以下是一些未经测试的代码。 用印刷品随意洒上,以弄清楚发生了什么。
from javax.swing.tree import TreeModel
class XmlTreeModel(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]
# ignore for now - not modifying XML
def addTreeModelListener(self, listener): pass
def removeTreeModelListener(self, listener): pass
def valueForPathChanged(self, path, new_value): pass