iknowAPIを使ったちょっとした辞書アプリ

SwingBuilderの練習でiknowAPIの辞書検索するクライアントを作ってみた。

がんばればもっときれいに書けていろいろできそう。

import groovy.swing.SwingBuilder
import java.awt.BorderLayout as BL
import javax.swing.WindowConstants as WC
import javax.swing.BorderFactory as BF


slurper = new XmlSlurper()
swing = new SwingBuilder()


search = swing.action(
    name:"search",                 //アクションの名前
    closure: this.&searchWord,     //処理内容
    mnemonic:'S',                  //簡略記憶記号
    accelerator:'ctrl S'           //促進するもの
)

frame = swing.frame(title:"Dictionary",
                    location:[100,100],
                    size:[300,300],
                    defaultCloseOperation:WC.EXIT_ON_CLOSE){

    menuBar(){
        menu(mnemonic:'M','Menu'){
            menuItem(action:search)
            separator()
            menuItem() {
               action(name:'Exit',accelerator:'ctrl  Q', closure:{ System.exit(0) })
            }
        }
    }

    panel(border:BF.createEmptyBorder(6,6,6,6)){
        borderLayout()
        vbox(constraints:BL.NORTH){
            hbox{
                hstrut(width:5)
                label("WORD ")
                textField(id:"word",action:search ,columns:10)    
                button(action:search )
            }
        }
        vbox(constraints:BL.CENTER){
            vstrut(10)
            textArea(id:"meanings",size:[200,200])
        }
    }
}

frame.show()

def searchWord(event)  {

    def sortCols = {a,b -> 
        def aValue = a.text()
        def bValue = b.text()
        if(!aValue.equals(bValue)){
            return 1
        }else{
            return 0
        }
    }
    
    def word = swing.word.text
    def url = new URL("http://api.iknow.co.jp/items/matching/${word}.xml")
    def xml = url.getText("utf8")
    def vocabulary = slurper.parseText(xml)
    def meanings =  vocabulary.items.item.responses.response.text
    def sounds = vocabulary.items.item.cue.sound
    swing.meanings.text = meanings.list().unique(sortCols).join("\n")
}