【发布时间】:2019-11-17 14:33:26
【问题描述】:
我有创建一些图形的 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");
}
}
我该如何纠正这个问题?
【问题讨论】:
-
如果需要看paint方法,请在下方评论。
-
您发布的代码没有给我们任何提示,您的问题在哪里。请提供minimal reproducible example,以便我们也可以重现和调试它以找到适合您情况的解决方案。请不要在此处发布您的整个代码,而是创建一个小的可运行类来演示您的问题。
-
(1-) 你为什么一直发布这个旧代码???你被告知你的代码结构是完全错误的。由于结构不佳,您又遇到了另一个问题。如果您按照给出的工作示例进行操作,就没有问题。不仅您发布的代码没用。您没有发布显示如何重新创建图像的代码,您没有显示“saveImageToLocalDisk。即使您被告知它们什么都不做,您的代码仍然有“setBounds()”语句。我们为什么要继续尝试提供帮助当你不听已经给出的建议时???
-
您错过了第一条评论。我们希望看到minimal reproducible example。我们对您的申请不感兴趣。 “MRE”的重点是简化代码,以确保您理解您提出的问题并使用最少的代码来演示问题。请注意,在下面 Sergiy 提供的“MRE”中,您可以复制/粘贴/编译/测试单个 Java 源文件。我们不关心您在方便时完成应用程序。我们担心这个问题对我们来说很容易理解。您花时间让我们轻松地为您提供帮助。
-
我不会帮助你,因为你没有努力重组你的代码。当您尝试添加新功能时,结构不佳的代码只会不断导致问题。第 3 次或第 4 次,Swing 教程中的演示代码是开始构建更好结构的地方。
标签: java image swing graphics save