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