Devilmarkus Geschrieben 1. November 2008 Teilen Geschrieben 1. November 2008 Hallo zusammen, momentan befasse ich mich mit Screenshotspeicherung. Dabei tritt folgendes Problem auf: Der Screenshot wird zwar richtig gespeichert, allerdings kann ich das "Vorschaufenster" nicht aktualisieren. protected void screenPreview(){ final Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); screenpreview.setTitle("Screenshot"); ImageIcon spr = null; spr = new ImageIcon(images); sprev = new JLabel(spr); screenpreview.add(sprev); screenpreview.pack(); screenpreview.setLocation((d.width - screenpreview.getSize().width), (0)); screenpreview.setAlwaysOnTop(true); screenpreview.setVisible(true); } JFrame screenpreview = new JFrame(){ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { screenpreview.dispose(); } } public synchronized void setTitle(String title) { super.setTitle(title); enableEvents(AWTEvent.WINDOW_EVENT_MASK); } }; Dieses soll das "Vorschaufenster" sein. Nimmt man nun den ersten Screenshot auf, wird dieser auch korrekt angezeigt. Will man allerdings einen weiteren speichern, wird immernoch der alte angezeigt, obwohl das Fenster geschlossen wurde (dispose() Wie bekommt ich es eventuell hin, das Fenster dennoch aktuell zu haben? (images ist das Bild, welches in der Zwischenablage ist) MfG Markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
speedi Geschrieben 1. November 2008 Teilen Geschrieben 1. November 2008 Also dein Programm macht den Screenshot nicht selbst, sondern zeigt nur an was sich in der Zwischenablage des Betriebssystems befindet? Wenn das so ist fällt mir nur eins ein: Du musst in regelmäßigen Abständen prüfen (mittels eines Threads), ob sich die Zwischenablage geändert hat. Wenn ja musst du bei deinem JLabel das Image neu setzen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Devilmarkus Geschrieben 1. November 2008 Autor Teilen Geschrieben 1. November 2008 Nun also der Screenshot wird schon im Programm generiert. Hier der zusammenhängende Code: public void screenshot(){ computer.stop(); display.grabFocus(); display.requestFocus(); JFileChooser savePngFileChooser; try { Rectangle rect = new Rectangle(display.getBounds()); rect.setLocation(display.getLocationOnScreen()); Robot robot = new Robot(); images = robot.createScreenCapture(rect); File file; screenPreview(); savePngFileChooser = new JFileChooser(); pngFilter = new PNGFileFilter(); savePngFileChooser.setFileFilter(pngFilter); savePngFileChooser.setDialogTitle("Save Screenshot..."); savePngFileChooser.setFileSelectionMode(2); int result = savePngFileChooser.showSaveDialog(this); screenpreview.dispose(); if (result == JFileChooser.APPROVE_OPTION) { //Save the screenshot as a png String savename=savePngFileChooser.getSelectedFile().toString(); if (savename.endsWith(".PNG".toUpperCase())) System.out.print(""); else savename=savename+".png"; file = new File(savename); ImageIO.write(images, "png", file); } screenshottimer = 0; computer.start(); } catch (Exception e) { System.out.println(e.getMessage()); } } protected void screenPreview(){ final Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); screenpreview.setTitle("Screenshot"); ImageIcon spr = null; spr = new ImageIcon(images); sprev = new JLabel(spr); screenpreview.add(sprev); screenpreview.pack(); screenpreview.setLocation((d.width - screenpreview.getSize().width), (0)); screenpreview.setAlwaysOnTop(true); screenpreview.setVisible(true); } JFrame screenpreview = new JFrame(){ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { screenpreview.dispose(); } } public synchronized void setTitle(String title) { super.setTitle(title); enableEvents(AWTEvent.WINDOW_EVENT_MASK); } }; Ist natürlich nicht komplett... einige initialisitionen fehlen, sind aber vorhanden... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Devilmarkus Geschrieben 2. November 2008 Autor Teilen Geschrieben 2. November 2008 Problem selber gelöst: public void screenshot(){ if (executable) frame.setAlwaysOnTop(false); computer.stop(); display.grabFocus(); display.requestFocus(); try { Rectangle rect = new Rectangle(display.getBounds()); rect.setLocation(display.getLocationOnScreen()); Robot robot = new Robot(); images = robot.createScreenCapture(rect); File file; screenPreview(); pngFilter = new PNGFileFilter(); savePngFileChooser.setFileFilter(pngFilter); savePngFileChooser.setDialogTitle("Save Screenshot..."); savePngFileChooser.setFileSelectionMode(2); screenpreview.setAlwaysOnTop(false); int result = savePngFileChooser.showSaveDialog(this); screenpreview.dispose(); if (result == JFileChooser.APPROVE_OPTION) { String savename=savePngFileChooser.getSelectedFile().toString(); if (savename.toLowerCase().endsWith(".png")) System.out.print(""); else savename=savename+".png"; file = new File(savename); ImageIO.write(images, "png", file); } } catch (Exception e) { System.out.println(e.getMessage()); } screenshottimer = 0; computer.start(); if (executable) frame.setAlwaysOnTop(onTop); } protected void screenPreview(){ screenpreview = new JFrame(){ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { screenpreview.dispose(); } } public synchronized void setTitle(String title) { super.setTitle(title); enableEvents(AWTEvent.WINDOW_EVENT_MASK); } }; screenpreview.setTitle("Screenshot"); ImageIcon spr = null; spr = new ImageIcon(images); sprev = new JLabel(spr); screenpreview.add(sprev); screenpreview.pack(); screenpreview.setLocation(0, 0); screenpreview.setAlwaysOnTop(true); screenpreview.setVisible(true); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.