XML (E4X) のデータを JTreeで表示してみる
Rhinoの, XML (E4X) の属性のチェックが以前の方法では対処できなくなったので, そのメモ みたいな。前は if (data.@src == undefined) {}
て感じで判断できたけど, 今のは無理。もちろん if (data.@src) {}
てのも無理。
/* Tree view *//* */ importPackage(Packages.javax.swing, java.awt) importPackage(Packages.javax.swing.tree) importClass(Packages.javax.swing.table.AbstractTableModel) /* データを読み込む */ var file = arguments.length > 0? arguments[0]: 'TreeData.ser' var xmlRoot = new XML(deserialize(file)) function createComponents() { function setRoot(root) { return function () { return root } } var treeRoot = setRoot(xmlRoot) var treeModel = new TreeModel() { getChild: function (parent, index) { return parent.*[index] }, getChildCount: function (parent) { return parent.*.length() }, getIndexOfChild: function (parent, child) { return child.childIndex() }, getRoot: treeRoot, isLeaf: function (node) { return node.hasSimpleContent() }, //addTreeModelListener: function (l) {}, //removeTreeModelListener: function (l) {}, valueForPathChanged: function (path, newValue) { print(path, newValue) }, } var tree = new JTree(treeModel) tree.cellRenderer = new JavaAdapter(DefaultTreeCellRenderer, { getTreeCellRendererComponent: function (tree, value, sel, expanded, leaf, row, hasFocus) { var n = value.hasComplexContent()? value.name(): value.@src this.super$getTreeCellRendererComponent(tree, n, sel, expanded, leaf, row, hasFocus) return this }, }) var pane = new JPanel() pane.add(new JScrollPane(tree)) return pane } function main() { try { UIManager.setLookAndFeel(UIManager.systemLookAndFeelClassName) //UIManager.setLookAndFeel(UIManager.crossPlatformLookAndFeelClassName) } catch (e) {} var frame = new JFrame('Tree View') frame.defaultCloseOperation = JFrame.EXIT_ON_CLOSE frame.contentPane.add(createComponents()) frame.pack() frame.visible = true } main()