今まで、ImageJ上で、画像を表示させたウィンドウを一番前に表示させるために、 IJ.selectWindow というのを使っていました。これは、
IJ.selectWindow("ウィンドウタイトル")
を指定すると、指定したウィンドウをアクティブにして一番前に表示させるというコマンドです(なお、頭に、 from ij import IJ による IJ のインポートが必要です)。
ところが Linux 上でうまく働いてくれません。アクティブにはなるのですが、一番前に表示してくれません。
他に何かコマンドはないかと探すと、WindowsManager にあるようです( WindowManager (ImageJ API) ) 。setWindow というメソッドです。しかし、引数が、java.awt.Frame win
もしくは java.awt.Window win
とあります。しかしどうやって java.awt.Window
形式の引数を取得すればいいのか... と困りました。探してみると、ImagePlus に getWindow というメソッドがあることが分かりました( ImagePlus (ImageJ API) )。"Returns the ImageWindow that is being used to display this image." とあります。どうもこれで行けそうです。つまりImagePlus に対し、それが対応するウィンドウを getWindow で取得すれば良さそうです。結果的に次のようなコードを使いました。
from ij import IJ, ImagePlus
from ij import WindowManager as WM
:
WM.setWindow(imp.getWindow())
ところで、これで指定しても、Linux 上では、アクティブになっても前に来てくれません。どうもこれは Linux 上の JRE 自体において、Windowの順番指定が無効であるようです。
どうも、Java (ImageJ) が一番確実に動くのが Windows、 次が Mac OS X で、Linux はその次になるようです。マルチプラットフォームで開発しようとする場合、そのあたりを頭に置いておく必要がありそうです。