2012-02-09 3 views
0

트리에서 시각적으로 표현하고 싶은 XML 파일이 있습니다. 이 작업을 수행하려면 자이 썬을 사용해야하며 시스템에는 버전 2.5.0 만 사용할 수 있습니다. 나는 자바 경험이없고 (그것을 읽는 데 어려움이있다), 약간의 스윙 경험 (자이 썬을 통해)을 가지고 JTree()로 이것을 할 수 있다고 들었다. 이것에 대한 몇 가지 Java Swing 예제를 보았지만 누군가 Jythonic 방식을 알고 있습니까? 제발 XML 파서를 사용할 수 있습니다. xml.etree.ElementTree의 XML 파서를 사용하고 있습니다.Swing 트리에서 XML 파일을 나타낼 수있는 기분 전환 방법이 있습니까?

편집 : 나는 추이 테이의 예를 조금과 원숭이 노력이 시도 :

TypeError: add(): 1st arg can't be coerced to java.awt.PopupMenu, java.awt.Component

암 말, 불행하게도

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)에 도달 예외가 발생 콘텐츠 창에 추가하여 테스트 할 수 없었습니다.

편집 : JTree가 누락되었습니다. 이 수정 프로그램으로 코드를 업데이트했습니다.

답변

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 
+0

나는 그것을 시도하고 내 질문에 코드를 추가했습니다. 예외의 빠른 구글은 방금 당신이 그것을 인식 할 수있는 많은 자바를 읽을 수없는 것을 반환 했습니까? – aeroNotAuto

+0

JTree는 TreeModel을 사용하여 데이터를 가져옵니다. self.contentPane.add (JTree (xmlTreeModel)) –

+0

오, 그건 바보 같은 짓이었습니다. 굉장해, 고마워! – aeroNotAuto

관련 문제