Ubuntuで、Groovyを使って常駐アプリ作る・その2

2019-02-12Groovy, Java, Ubuntu

昨日に引き続き、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を使っているため?(でも、他のアプリは日本語表示出来ている)

2019-02-12Groovy, Java, Ubuntu