Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Image bleibt im Vorschaufenster

Empfohlene Antworten

Veröffentlicht

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

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.

  • Autor

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...

  • Autor

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);

  }

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.