1

特定のウィンドウのスクリーンショットを撮るアプリの一部がありますが、その前にウィンドウを前面に表示したいと考えています。これは私の Mac マシンでは問題なく動作しますが、Windows XP で並行してテストしたところ、スクリーンショットには重なっているウィンドウがあった領域が常にグレー表示されていました。一番上にしたいウィンドウが一番上に転送されている間、常にスクリーンショットが撮られているようです。私は両方を使ってみました:

     frame.setVisible(true);
            and
     frame.setAlwaysOnTop(true);

誰かがこの問題の合理的な解決策を持っていますか?

4

2 に答える 2

1
  • スクリーンショットを撮るスレッドに遅延を追加できます。

  • フォーカスが得られたときに、フレームからスクリーンショットを起動できます。

    class ScreenshotShooter implements FocusListener  {
        public void focusGained( FocusEvent e ) {
            // smile..... 
            // you may add a sec of delay here just be be sure.
        }
        public void focusLost( FocusEvent e ) {}
     }
    
    
     FocusListener focusListener = new ScreenshotShooter();
     frame.addFocusListener( focusListener );
     frame.setVisible( true ); // should autofire
     frame.remoe( focusListener);
    
  • 両方できます。

于 2009-08-14T21:42:38.867 に答える
1

wJava によってペイントされたウィンドウのスクリーンショットを撮ろうとしている場合は、それ自体を

BufferedImage bi = new BufferedImage(
    w.width, w.height, BufferedImage.TYPE_INT_RGB); 
Graphics g = bi.getGraphics();

ウィンドウのpaint(g)メソッドを呼び出すことによって。その後、BufferedImage をファイルに保存できます。外の窓をつかんでいるのなら、オスカー・レイエスがすべての答えを教えてくれていると思います。

于 2009-08-14T22:30:16.727 に答える