Cercando di portare telaio girevole in primo piano prima di prendere uno screenshot ma ottenere manufatti

StackOverflow https://stackoverflow.com/questions/1280333

Domanda

ho una parte della mia app che prende uno screenshot di una determinata finestra, ma prima di farlo voglio portare la finestra in primo piano. Questo funziona bene sulla mia macchina Mac, ma quando l'ho testato su Windows XP sul paralleli schermata è sempre una zona ombreggiata dove la finestra era sovrapposizione. Sembra che la schermata è sempre preso mentre la finestra che voglio in cima viene trasferita verso l'alto. Ho provato con entrambi:

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

Qualcuno ha una soluzione ragionevole per questo problema?

È stato utile?

Soluzione

Se si sta tentando di prendere uno screenshot di una w finestra dipinta da Java, si può solo chiedere per dipingere se stessa su un

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

chiamando il metodo paint(g) delle finestre. È quindi possibile salvare il BufferedImage in un file. Se si sta afferrando una finestra esterna, allora credo Oscar Reyes vi ha dato tutte le risposte.

Altri suggerimenti

  • Si potrebbe aggiungere un ritardo del thread che prende lo screenshot.

  • Si potrebbe sparare lo screenshot dal telaio quando la si è guadagnato la messa a fuoco:

    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);
    
  • Si può fare entrambe le cose.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top