{"id":564,"date":"2025-01-01T19:05:38","date_gmt":"2025-01-01T18:05:38","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=564"},"modified":"2025-02-25T19:08:57","modified_gmt":"2025-02-25T18:08:57","slug":"screenshots-in-java-erstellen","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=564","title":{"rendered":"Screenshots in Java erstellen"},"content":{"rendered":"\n<p>Das Erstellen von Screenshots in einer Java-Anwendung ist eine h\u00e4ufig ben\u00f6tigte Funktion, sei es f\u00fcr Debugging-Zwecke, zur Protokollierung oder um eine Benutzeroberfl\u00e4che zu dokumentieren. In diesem Artikel wird erkl\u00e4rt, wie man mit Java Screenshots des gesamten Bildschirms sowie spezifischer GUI-Komponenten (in Swing und JavaFX) aufnimmt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Screenshots des gesamten Bildschirms aufnehmen<\/h2>\n\n\n\n<p>Die einfachste M\u00f6glichkeit, einen Screenshot des gesamten Bildschirms in Java zu erstellen, ist die Verwendung der <code>Robot<\/code>-Klasse. Dieses Beispiel zeigt, wie man einen Screenshot aufnimmt und speichert:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.awt.*;\n<span class=\"hljs-keyword\">import<\/span> java.awt.image.BufferedImage;\n<span class=\"hljs-keyword\">import<\/span> java.io.File;\n<span class=\"hljs-keyword\">import<\/span> javax.imageio.ImageIO;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ScreenshotFull<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-keyword\">try<\/span> {\n            Robot robot = <span class=\"hljs-keyword\">new<\/span> Robot();\n            Rectangle screenRect = <span class=\"hljs-keyword\">new<\/span> Rectangle(Toolkit.getDefaultToolkit().getScreenSize());\n            BufferedImage screenCapture = robot.createScreenCapture(screenRect);\n            ImageIO.write(screenCapture, <span class=\"hljs-string\">\"png\"<\/span>, <span class=\"hljs-keyword\">new<\/span> File(<span class=\"hljs-string\">\"screenshot.png\"<\/span>));\n            System.out.println(<span class=\"hljs-string\">\"Screenshot gespeichert als screenshot.png\"<\/span>);\n        } <span class=\"hljs-keyword\">catch<\/span> (Exception ex) {\n            ex.printStackTrace();\n        }\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Ber\u00fccksichtigung mehrerer Bildschirme<\/h3>\n\n\n\n<p>Falls mehrere Bildschirme vorhanden sind, kann man die <code>GraphicsEnvironment<\/code>-Klasse nutzen, um die Grenzen aller Bildschirme zu bestimmen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();\nGraphicsDevice&#91;] screens = ge.getScreenDevices();\n<span class=\"hljs-keyword\">for<\/span> (GraphicsDevice screen : screens) {\n    Rectangle bounds = screen.getDefaultConfiguration().getBounds();\n    BufferedImage capture = robot.createScreenCapture(bounds);\n    ImageIO.write(capture, <span class=\"hljs-string\">\"png\"<\/span>, <span class=\"hljs-keyword\">new<\/span> File(<span class=\"hljs-string\">\"screenshot_\"<\/span> + screen.getIDstring() + <span class=\"hljs-string\">\".png\"<\/span>));\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">2. Screenshots einer Swing-Komponente aufnehmen<\/h2>\n\n\n\n<p>Oftmals ist es sinnvoll, nur eine bestimmte Komponente einer Swing-Oberfl\u00e4che zu erfassen. Dies kann durch das Rendern der Komponente in ein <code>BufferedImage<\/code> erreicht werden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.awt.*;\n<span class=\"hljs-keyword\">import<\/span> java.awt.image.BufferedImage;\n<span class=\"hljs-keyword\">import<\/span> java.io.File;\n<span class=\"hljs-keyword\">import<\/span> javax.imageio.ImageIO;\n<span class=\"hljs-keyword\">import<\/span> javax.swing.*;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SwingComponentScreenshot<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        JFrame frame = <span class=\"hljs-keyword\">new<\/span> JFrame(<span class=\"hljs-string\">\"Swing Screenshot Beispiel\"<\/span>);\n        JButton button = <span class=\"hljs-keyword\">new<\/span> JButton(<span class=\"hljs-string\">\"Screenshot machen\"<\/span>);\n        frame.add(button);\n        frame.setSize(<span class=\"hljs-number\">300<\/span>, <span class=\"hljs-number\">200<\/span>);\n        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n        frame.setVisible(<span class=\"hljs-literal\">true<\/span>);\n        \n        button.addActionListener(e -&gt; {\n            <span class=\"hljs-keyword\">try<\/span> {\n                BufferedImage image = <span class=\"hljs-keyword\">new<\/span> BufferedImage(button.getWidth(), button.getHeight(), BufferedImage.TYPE_INT_ARGB);\n                button.paint(image.getGraphics());\n                ImageIO.write(image, <span class=\"hljs-string\">\"png\"<\/span>, <span class=\"hljs-keyword\">new<\/span> File(<span class=\"hljs-string\">\"button_screenshot.png\"<\/span>));\n                System.out.println(<span class=\"hljs-string\">\"Screenshot der Komponente gespeichert als button_screenshot.png\"<\/span>);\n            } <span class=\"hljs-keyword\">catch<\/span> (Exception ex) {\n                ex.printStackTrace();\n            }\n        });\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">3. Screenshots einer JavaFX-Komponente aufnehmen<\/h2>\n\n\n\n<p>JavaFX bietet eine eingebaute M\u00f6glichkeit zur Screenshot-Erstellung durch die <code>Snapshot<\/code>-Methode.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> javafx.application.Application;\n<span class=\"hljs-keyword\">import<\/span> javafx.scene.Scene;\n<span class=\"hljs-keyword\">import<\/span> javafx.scene.SnapshotParameters;\n<span class=\"hljs-keyword\">import<\/span> javafx.scene.control.Button;\n<span class=\"hljs-keyword\">import<\/span> javafx.scene.image.WritableImage;\n<span class=\"hljs-keyword\">import<\/span> javafx.stage.Stage;\n<span class=\"hljs-keyword\">import<\/span> javax.imageio.ImageIO;\n<span class=\"hljs-keyword\">import<\/span> java.awt.image.BufferedImage;\n<span class=\"hljs-keyword\">import<\/span> java.io.File;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">JavaFXScreenshot<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Application<\/span> <\/span>{\n    @Override\n    public <span class=\"hljs-keyword\">void<\/span> start(Stage primaryStage) {\n        Button button = <span class=\"hljs-keyword\">new<\/span> Button(<span class=\"hljs-string\">\"Screenshot machen\"<\/span>);\n        button.setOnAction(e -&gt; {\n            <span class=\"hljs-keyword\">try<\/span> {\n                WritableImage snapshot = button.snapshot(<span class=\"hljs-keyword\">new<\/span> SnapshotParameters(), <span class=\"hljs-literal\">null<\/span>);\n                BufferedImage image = javafx.embed.swing.SwingFXUtils.fromFXImage(snapshot, <span class=\"hljs-literal\">null<\/span>);\n                ImageIO.write(image, <span class=\"hljs-string\">\"png\"<\/span>, <span class=\"hljs-keyword\">new<\/span> File(<span class=\"hljs-string\">\"javafx_button_screenshot.png\"<\/span>));\n                System.out.println(<span class=\"hljs-string\">\"Screenshot gespeichert als javafx_button_screenshot.png\"<\/span>);\n            } <span class=\"hljs-keyword\">catch<\/span> (Exception ex) {\n                ex.printStackTrace();\n            }\n        });\n        \n        primaryStage.setScene(<span class=\"hljs-keyword\">new<\/span> Scene(button, <span class=\"hljs-number\">300<\/span>, <span class=\"hljs-number\">200<\/span>));\n        primaryStage.show();\n    }\n    \n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        launch(args);\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Das Erstellen von Screenshots in Java ist mit der <code>Robot<\/code>-Klasse f\u00fcr den gesamten Bildschirm und mit der <code>paint<\/code>-Methode (Swing) bzw. <code>snapshot<\/code> (JavaFX) f\u00fcr GUI-Elemente einfach umsetzbar. Mehrere Bildschirme lassen sich mit der <code>GraphicsEnvironment<\/code>-Klasse handhaben. Mit diesen Techniken lassen sich vielseitige Screenshot-Funktionen in Java-Anwendungen implementieren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Erstellen von Screenshots in einer Java-Anwendung ist eine h\u00e4ufig ben\u00f6tigte Funktion, sei es f\u00fcr Debugging-Zwecke, zur Protokollierung oder um eine Benutzeroberfl\u00e4che zu dokumentieren. In diesem Artikel wird erkl\u00e4rt, wie man mit Java Screenshots des gesamten Bildschirms sowie spezifischer GUI-Komponenten (in Swing und JavaFX) aufnimmt. 1. Screenshots des gesamten Bildschirms aufnehmen Die einfachste M\u00f6glichkeit, einen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-564","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=564"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/564\/revisions"}],"predecessor-version":[{"id":565,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/564\/revisions\/565"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}