屏幕截图多次程序

时间:2018-09-17 14:08:05

标签: java swing awt jbutton

我创建了一个小程序,用于在单击按钮时进行屏幕截图。但是,一旦单击并获取屏幕截图并将其另存为“屏幕截图”,它便无法单击并获取另一个,而不会覆盖刚刚拍摄的快照。我希望它能够在不关闭程序的情况下进行多次保存并全部保存。

Screenshot of my code that I took with my program.

谢谢!

编辑:

    package screenshot;

    import java.awt.AWTException;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.Toolkit;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;

    import javax.imageio.ImageIO;

    public class NewJFrame extends javax.swing.JFrame {


public NewJFrame() {
    initComponents();
}

// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jButton1 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jButton1.setIcon(new javax.swing.ImageIcon("C:\\Users\\manwe\\Desktop\\java stuff\\6inch_1.png")); // NOI18N
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jButton1)
    );

    pack();
}// </editor-fold>                        

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
     try {
        Robot robot = new Robot();
        String format = "png";
        String fileName = "screenshot." + format;

        Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
        BufferedImage screenFullImage;
        BufferedImage BufferedImage = screenFullImage = robot.createScreenCapture(screenRect);
        ImageIO.write(screenFullImage, format, new File(fileName));


    } catch (AWTException | IOException ex) {

    }
}                                        


public static void main(String args[]) {
    try {
        Robot robot = new Robot();
        String format = "png";
        String fileName = "screenshot." + format;

        Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
        BufferedImage screenFullImage;
        BufferedImage BufferedImage = screenFullImage = robot.createScreenCapture(screenRect);
        ImageIO.write(screenFullImage, format, new File(fileName));


    } catch (AWTException | IOException ex) {

    }



    java.awt.EventQueue.invokeLater(() -> {
        new NewJFrame().setVisible(true);
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
// End of variables declaration                   

}

2 个答案:

答案 0 :(得分:3)

为文件使用其他名称。您使用相同的名称,这就是为什么它会覆盖先前的文件。

您可以将时间戳添加到您拥有的名称上。这样可以确保图像的名称不同。

您可以使用以下代码获取时间戳:

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());

ImageIO.write(screenFullImage, format, new File(fileName+timeStamp));

答案 1 :(得分:2)

查看您的方法jButton1ActionPerformed(...)。您始终在那里使用文件名screenshot.png。如果不想一直使用相同的名称,则每次保存屏幕截图时,都应在此处更改代码以使用新的唯一名称。例如,附加一个时间戳:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        Robot robot = new Robot();
        String format = "png";
        String fileName = "screenshot-" + System.currentTimeMillis() + "." + format;

        Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
        BufferedImage screenFullImage;
        screenFullImage = robot.createScreenCapture(screenRect);
        ImageIO.write(screenFullImage, format, new File(fileName));


    } catch (AWTException | IOException ex) {

    }
}
相关问题