2
JTree에 XML 파일을 표시하는 간단한 Jython GUI가 있습니다. JTree의 노드가 호출되는 것을 사용자 정의 할 수있는 트리 모델에서 대체 할 수있는 메소드가 있습니까? 아니면 자바와 같은 렌더러로 뭔가를해야합니까? 가능한 경우 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 속성에서 "카테고리"또는 더 나은, 뭔가 정의 말을 변경하고 싶습니다. 클래스의
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])
으로 작성됩니다
편집
: 내 나무 약간DisplayNode
을 변경하여 XML 속성을 표시하도록 나는 추이 테이의 답변을 확장 할 수 있었다. 모든 XML 노드에
Name
이라는 속성이 있다는 것을 알고 있기 때문에 검색 엔진을 통해 도착한 사용자에게는 나를 위해 작동합니다.