Ubuntuで、Groovyを使って常駐アプリ作る・その2
昨日に引き続き、Ubuntuでクリップボード監視プログラムを作ってみています。
システムトレイ、クリップボード操作、そもそもGUI(AWT)の実装。分からないことだらけです。
なんとかクリップボードを常時監視し、コピーorカットされた文字列をアプリのhistory項目に追加出きるようにはなリました。
import java.awt.*
import java.awt.datatransfer.DataFlavor
import java.awt.datatransfer.FlavorListener
import java.awt.event.ActionListener
if (!SystemTray.isSupported()) {
println "SystemTray is not supported!"
return
}
toolkit = Toolkit.getDefaultToolkit()
tray = SystemTray.systemTray
image = toolkit.getImage("icon.png")
// <<でadd実行可能に。
menuAdd = { delegate.add(it) }
MenuItem.metaClass.leftShift = menuAdd
Menu.metaClass.leftShift = menuAdd
PopupMenu.metaClass.leftShift = menuAdd
SystemTray.metaClass.leftShift = menuAdd
popup = new PopupMenu()
item1 = new Menu("history")
item1.addActionListener({ event ->
println "実装途中"
} as ActionListener)
popup << item1
item2 = new MenuItem("setting")
item2.addActionListener({ event ->
println "popup action"
} as ActionListener)
popup << item2
popup.addSeparator()
item3 = new MenuItem("exit")
item3.addActionListener({ event ->
System.exit(0)
} as ActionListener)
popup << item3
clip = toolkit.getSystemClipboard();
clip.addFlavorListener({ event ->
def recive = clip.getContents(null)
def recieveStr = null
try {
recieveStr = (String) recive.getTransferData(DataFlavor.stringFlavor)
def i = new MenuItem("" + recieveStr)
item1 << i
} catch (Exception e) {
recieveStr = ""
}
println "" + recieveStr
} as FlavorListener)
TrayIcon trayIcon = new TrayIcon(image, "Clipboard Manager", popup)
tray << trayIcon
問題
MenuItemに日本語を利用すると文字化けしてしまいます…同様にコピーしたときにも日本語が含まれていた場合には履歴情報が文字化けしてしまいます。(GUI上のみ)
AWTって、日本語使うと化ける?(そんなわけはない)
あるいはUbuntuを使っているため?(でも、他のアプリは日本語表示出来ている)
ディスカッション
コメント一覧
まだ、コメントがありません