Cercando di portare telaio girevole in primo piano prima di prendere uno screenshot ma ottenere manufatti
-
16-09-2019 - |
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?
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.