4

Java アプリケーションの印刷画面を作成するにはどうすればよいですか?

   saveScreen.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            ...
        }
    });
4

2 に答える 2

6

私は別の方法を与えます、それは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;
于 2013-06-29T12:07:24.153 に答える
4

画面をキャプチャする方法の例を次に示します。

Robot robot = new Robot();
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage capture = robot.createScreenCapture(screenRect);

次に、BufferedImageコンテンツをファイルに書き込むストリームに渡すだけです。

于 2013-06-29T11:55:25.780 に答える