にデプロイされたボタンを押すことによって実行されるアクション (つまりメソッド) でJFrame
、Java アプリを非表示にしてからスクリーンショットを取得したいと考えています。最後に、スクリーンショットを撮ったら、それをJFrame
見えるようにする必要があります。
方法は次のとおりです。
public void myButtonPressedAction(){
//Hiding the JFrame
this.setVisible(false);
//Now I use Robot to get a screenshot using another method
//not reported for simplicity
myMethodToGetScreenshot();
//Making the JFrame visible
this.setVisible(true);
}
可視性が false に設定されると、アプリが非表示になり始め、すぐにスクリーンショットが取得されます。残念ながら、スクリーンショットはJFrame
フェードアウト中もキャプチャします (つまり、非表示になり、isVisible
メソッドは を返しますtrue
が、はJFrame
完全に見えないわけではありません)。
考えられる解決策の 1 つは、タイマーを挿入して への呼び出しと への呼び出しの間に遅延を置くsetVisible(false)
ことmyMethodToGetScreenshot()
です。ただし、システムがビジーであると仮定すると、遅延は過小評価される可能性があります。逆に、遅延が大きいとアプリケーションが遅くなります。
JFrame
が完全にフェードアウトする、つまり実際に見えなくなる正確な時刻を取得するにはどうすればよいですか?
編集
これはコンストラクターで初期化されます。
String myPath= ...;//here I have a String that represent a path to a folder.
JPEGImageWriteParam JPEG_PARAMS_BEST_QUALITY = new JPEGImageWriteParam(null);
JPEG_PARAMS_BEST_QUALITY.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
JPEG_PARAMS_BEST_QUALITY.setCompressionQuality(1f);
これはのコードです myMethodToGetScreenshot()
:
public void myMethodToGetScreenshot(){
BufferedImage capture = new Robot().createScreenCapture(screenArea);
ImageWriter writer = writerService.getWriter();
writer.setOutput(new FileImageOutputStream(new File(myPath+"screenshot.jpg")));
writer.write(null, new IIOImage(capture, null, null), JPEG_PARAMS_BEST_QUALITY);
}
これは私が得るスクリーンショットです。JFrame がフェードアウトしているのがわかります...