私はJTreeにXMLファイルを表示するシンプルなJython GUIを持っています。ツリーモデルでオーバーライドできるメソッドはありますか?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属性から何かのカスタムを言うためにそれらを変更したいと思います。
EDIT: 私の木は少し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
という属性を持つことがわかっているので、検索エンジン経由で到着した人のために、これは私のために働きます。