我有一個簡單的Jython GUI,它在JTree中顯示一個XML文件。有沒有一種方法可以在樹模型中重寫,這將允許我自定義JTree中的節點的調用方式?或者我需要用像Java這樣的渲染器來做些什麼?如果可能的話,我正在尋找一種Jythonic的方式來做到這一點(而不是直接的Java)。我可以訪問Jython 2.5.0。我簡單的代碼看起來是這樣的:我可以改變Jython JTree如何顯示我的XML嗎?
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.pack()
self.setDefaultCloseOperation(swing.JFrame.EXIT_ON_CLOSE)
self.setLocationRelativeTo(None)
self.setVisible(True)
if __name__ == "__main__":
viewer = Viewer()
viewer.display('my.xml')
眼下節點顯示爲<Element Category at 2>
,我想改變他們,只是說從XML屬性「分類」,甚至更好,一些自定義的。
編輯: 我能夠延長翠鐵伊的回答讓我的樹通過改變DisplayNode
略微顯示XML屬性:
class DisplayNode(object):
def __init__(self, node):
self.node = node
def __repr__(self):
return self.node.get('Name')
def __getitem__(self, item):
return self.node[item]
def __len__(self):
return len(self.node)
類的實例,然後分別DisplayNode(self.etree.getroot())
和DisplayNode(parent[index])
,創造。對於那些通過搜索引擎到達的人來說,這適用於我,因爲我知道我所有的XML節點都會有一個名爲Name
的屬性。