どのように私は、Swingを使用して、Windowsのタスクバーをフラッシュすることができますか?
質問
私は、Swingアプリケーションを開発していると私は、Windowsのタスクバーを点滅する必要があります。私は他のアプリケーションからフォーカスを盗むためにしたくないので、私はframe.requestFocus()
を使用することはできません。
解決
は、Windowsの新しいバージョンに適用されるかどうかは知りませんが、.toFront()メソッドは、現在のVMのウィンドウのどれがフォアグラウンドでなかった場合は、ウィンドウをフラッシュするために使用さています。
このは最小限に抑えフレームにframe.toFront()を呼び出すと、常に...それが点滅になるだろうことを意味します。
他のヒント
JNIWrapperそのwinpack拡張子を持つのは、あなたがやりたいことができます。
サイト上のデモは、アクションでそれを示しています。
あなたはどちらかあなたのGUIと.toFront
エンそれを強制的に最小限に抑えることができます:
Gui.frame.setState(Frame.ICONIFIED);
for (int i = 0; i < 3; i++) {
Thread.sleep(10);
Gui.frame.toFront();
Thread.sleep(10);
Gui.frame.setVisible(false);
Thread.sleep(10);
Gui.frame.toBack();
Thread.sleep(10);
Gui.frame.setVisible(true);
}
// be creative!!
これは悲しげにアクティブウィンドウからフォーカスを削除します。あなたは、アクティブなウィンドウを見つけると、後でそれを再アクティブ化できます。しかし、それでもまだ、点滅は約3秒間持続します。
...またはFlashWindow
に-call のの DLLを使用して問題の本当に根に取り掛かります。 DLLを呼び出すと、クリーンなJavaコードでは不可能である、あなたは他のプログラミング言語の助けが必要になります、可能性など JNA を持ちます。それ以外に、あなたはまた、別の言語で独自のプログラムを書いて、Javaアプリケーションから呼び出すことができます。私は下のAutoHotkeyをで例をあげるます:
AutoHotkeyをコードます:
if 0 != 1 ; note: in ahk, 1 corresponds args[1] and 0 corresponds args.length
{
msgbox, There needs to be ONE parameter passed over to this file, which is the name of the window that should be flashed.
ExitApp
}
programName = %1%
winget, hWnd, ID, %programName%
DllCall("FlashWindow",UInt,hWnd,Int,True)
、flash.exe
と呼ばれるファイルにコンパイルしてJavaの作業ディレクトリに入れ、あなたは任意の関数からそれを呼び出すことができます:
Runtime.getRuntime().exec("./flash.exe \"" + MyJFrame.getTitle() + "\"");
あるいは、AutoHotkey.dllとJavacode(インターネット上でそれを行う方法についてのガイドがあります)内のアクセスを、使用することができますので、任意の外部のexeファイルは必要ないと思います。
あなたはまだ、Windowsのタスクバーで点滅を達成する問題が発生した場合は、は、私に知らせてください!
これを行うための最善の方法:
if (!isFocused()) {
setVisible(false);
setVisible(true);
}
それ自体スイング使用して、あなたは非常におそらくことはできません。それは、Windowsの特定のことだ。