У меня есть SWing-код, который создает графику. У меня есть кнопка "Run Again"
, которая может воссоздать графику.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
final GraphicsDemo_noborders_ML demo = new GraphicsDemo_noborders_ML();
final JFrame jFrame = new JFrame();
jFrame.setTitle("Latest Programic Art");
jFrame.setSize(canvasW, canvasH);
JButton save = new JButton("Save");
JButton run = new JButton("Run Again");
save.setBounds(50, 100, 100, 50);
run.setBounds(50, 500, 100, 50);
final JPanel panel = new JPanel();
panel.add(save);
panel.add(run);
final JComponent canvas = new JComponent() {
@Override
protected void paintComponent(Graphics g) {
demo.paint(g);
}
};
jFrame.getContentPane().add(canvas, BorderLayout.CENTER);
jFrame.getContentPane().add(panel, BorderLayout.PAGE_START);
run.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Graphics g = canvas.getGraphics();
demo.paint(g);
}
});
save.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.showSaveDialog(null);
String location = chooser.getSelectedFile().toString();
demo.saveImageToLocalDisk(jFrame, location);
}
});
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
});
Кнопка сохранения предназначена для сохранения текущей графики в виде изображения. Однако при сохранении он не сохраняет текущую графику, а только исходную.
Метод сохранения приведен ниже,
private void saveImageToLocalDisk(JFrame jFrame, String location) {
BufferedImage image = null;
try {
Rectangle rectangle = jFrame.getBounds();
image = new Robot().createScreenCapture(rectangle);
} catch (AWTException e1) {
e1.printStackTrace();
}
Graphics2D graphics2D = image.createGraphics();
jFrame.paint(graphics2D);
try {
ImageIO.write(image, "jpeg", new File(location + "/Graphics.jpeg"));
} catch (Exception e) {
System.out.println("error");
}
}
Как мне исправить это?