Java アプリケーションの印刷画面を作成するにはどうすればよいですか?
saveScreen.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
...
}
});
Java アプリケーションの印刷画面を作成するにはどうすればよいですか?
saveScreen.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
...
}
});
私は別の方法を与えます、それはComponent
あなたが渡したものを出力します:
private static void print(Component comp) {
// Create a `BufferedImage` and create the its `Graphics`
BufferedImage image = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getDefaultScreenDevice().getDefaultConfiguration()
.createCompatibleImage(comp.getWidth(), comp.getHeight());
Graphics graphics = image.createGraphics();
// Print to BufferedImage
comp.paint(graphics);
graphics.dispose();
// Output the `BufferedImage` via `ImageIO`
try {
ImageIO.write(image, "png", new File("Image.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
少なくともする必要があります
import java.awt.Component;
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
EDT がブロックImageIO.write
されないようにするには、EDT で呼び出すべきではありません。そのため、try
-catch
ブロックを次のように置き換えます。
new SwingWorker<Void, Void>() {
private boolean success;
@Override
protected Void doInBackground() throws Exception {
try {
// Output the `BufferedImage` via `ImageIO`
if (ImageIO.write(image, "png", new File("Image.png")))
success = true;
} catch (IOException e) {
}
return null;
}
@Override
protected void done() {
if (success) {
// notify user it succeed
System.out.println("Success");
} else {
// notify user it failed
System.out.println("Failed");
}
}
}.execute();
そして、インポートするもう1つのこと:
import javax.swing.SwingWorker;
画面をキャプチャする方法の例を次に示します。
Robot robot = new Robot();
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage capture = robot.createScreenCapture(screenRect);
次に、BufferedImage
コンテンツをファイルに書き込むストリームに渡すだけです。