2012-02-09 5 views
0

ツリー内で視覚的に表現したいXMLファイルがあります。私がこれをやろうとすれば、私はJythonを使用しなければならず、私たちのシステムではバージョン2.5.0しか利用できません。私はJavaの経験がない(それを読みにくい)が、少しスイングの経験(Jythonを介して)と私はJTree()でこれを行うことができるかもしれない聞いたことがあります。私はこれのいくつかのJava Swingの例を見てきましたが、それを行うためのJythonicの方法を知っている人はいますか?私は特定のXMLパーサしか利用できないことに注意してください - 私は現在xml.etree.ElementTreeのXMLパーサーを使用しています。スイングツリーにXMLファイルを表すための巧妙な方法はありますか?

EDIT: 私はチュイテイの例でサルに少しを試してみましたが、これを試みた:それは

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

アムを言って、self.contentPane.add(xmlTreeModel)になったとき

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') 

は残念ながら、それは例外が発生しますコンテンツペインに追加するだけでテストすることはできませんか?

EDIT: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

私は試して、私の質問にコードを追加しました。例外の迅速なGoogleは、私が読むことができない多くのJavaを返した、あなたはそれを認識する任意のチャンス? – aeroNotAuto

+0

JTreeはTreeModelを使用してデータを取得します。 self.contentPane.add(JTree(xmlTreeModel)) –

+0

ああ、それは寂しいことでした。素晴らしいです、ありがとう! – aeroNotAuto

関連する問題