Skip to content

Instantly share code, notes, and snippets.

@osima
Created July 25, 2010 01:33
Show Gist options
  • Select an option

  • Save osima/489175 to your computer and use it in GitHub Desktop.

Select an option

Save osima/489175 to your computer and use it in GitHub Desktop.
木構造をmarkdown形式のファイルから生成
import javax.swing.*
//
// ノードクラス
//
class JNode extends javax.swing.tree.DefaultMutableTreeNode {
def JNode(){
super( 'root' )
}
def JNode( Node node ){
super( node )
}
}
class Node {
int level
String name
String toString(){ name }
}
//
// 1) アイテムをリストにする
//
def jnodelist = []
def f = new File('menuTree.markdown')
def reader = f.newReader('UTF-8')
reader.eachLine{
def matcher = (it =~ '(.*)- (.*)')
if( matcher.matches() ){
def node = new Node()
def depth = matcher.group(1)
node.level = depth.length()/4
node.name = matcher.group(2)
jnodelist.add( new JNode(node) )
}
}
//
// 2) 木構造をつくる.
//
JNode root = new JNode()
for(int i=0; i<jnodelist.size(); i++){
def jnode = jnodelist.get(i)
if( jnode.userObject.level == 0 ){
root.add( jnode )
}
if( jnode.userObject.level > 0 ){
// さかのぼって検索し、最初に見つけた level == (jnode.userObject.level-1) なノードの子ノードとして追加
int parentLevel = jnode.userObject.level-1
JNode pNode = null
for(int j=i-1; j>=0 ; j--){
if( jnodelist.get(j).userObject.level == parentLevel ){
pNode = jnodelist.get(j)
break
}
}
if( pNode != null ){
pNode.add( jnode )
}
}
}
//
// 3) JTree でプレビューして正しく木構造が構築できたかを確認.
//
def jtree = new JTree( new javax.swing.tree.DefaultTreeModel(root) )
def frame = new JFrame()
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)
frame.add( new JScrollPane(jtree) )
frame.setSize(400,400)
frame.setVisible(true)
  • 銀魂登場人物
    • 万屋
      • 坂田銀時
      • 志村新八
      • 神楽
    • 真選組
      • 近藤勲
      • 土方十四郎
      • 沖田総悟
      • 山崎退
    • 攘夷党
      • 桂小太郎
      • エリザベス
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment