image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« 2009-04-10 | トップページ | 2009-04-12 »

2009-04-11

2009-04-11

jruby で swing

Drag 可能な JTree を java で作成し、それを jruby から使ってみた。

Dndtree
Drag 可能な JTree の例は以下にある。
- http://terai.xrea.jp/Swing/DnDTree.html
> JTreeのノードをドラッグ&ドロップ - Java Swing Tips

このソースから、DnDTree クラスだけを抜き出したものをつくり、
DnDTree.jar をつくっておく。

java ソースのすべては引用しないが、
ヘッダ部だけを示す(jar の作り方などをコメント追加したので)

$ cat DnDTree.java
// See
//    http://terai.xrea.jp/Swing/DnDTree.html                                                                           

// javac -d . -encoding utf8 -target 1.5 DndTree.java                                                                  
// jar cvf DnDTree.jar samples                                                                                          

package samples;

//-*- mode:java; encoding:utf8n; coding:utf-8 -*-                                                                      
// vim:set fileencoding=utf-8:                                                                                          
//http://terai.xrea.jp/Swing/DnDTree.html                                                                              
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.io.*;
import javax.swing.*;
import javax.swing.tree.*;

//Java Swing Hacks - HACK #26: DnD JTree                                                                               
//http://www.oreilly.co.jp/books/4873112788/                                                                           
public class DnDTree extends JTree implements DragSourceListener, DropTargetListener, DragGestureListener {
    private static final String NAME = "TREE-TEST";
... 省略 ...

$ cat dndtree.rb
# See http://www.bloglines.com/blog/ThomasEEnebo?id=40

require 'pp'
require 'java'

require 'DnDTree.jar'
import 'samples.DnDTree'

import javax.swing.JFrame
import javax.swing.tree.DefaultMutableTreeNode
import javax.swing.tree.DefaultTreeModel

def getTreeData(v)
  root = DefaultMutableTreeNode.new("Root")
  DefaultTreeModel.new(vec2tree(root, v))
end

def vec2tree(parent, h)
  h.each do |k, v|
    if v.kind_of? Hash
      child = DefaultMutableTreeNode.new(k)
      parent.add(vec2tree(child, v))
    else
      parent.add(DefaultMutableTreeNode.new(k))
    end
  end
  parent
end

frame = JFrame.new "Dragable JTree"
frame.setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE)
frame.set_size(600, 400)

content = frame.content_pane
content.setLayout(java.awt.BorderLayout.new)

# ツリー
hash = { :A => nil, :B => {:B1 => nil, :B2 => nil}, :C => nil }
tree = DnDTree.new
tree.model = getTreeData(hash)

content.add(tree, java.awt.BorderLayout::CENTER)

frame.visible = true

ここでは、Hash を Tree 表示させてみているが、Array、XML の Dom などいろいろなものを Tree 表示させるように変更するのは簡単だ。

xmlunit の diff 情報を tree 表示にうまく反映させるはどんな風にすればよいだろうか?

« 2009-04-10 | トップページ | 2009-04-12 »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク