gpt4 book ai didi

java - 从 Jframe 创建图像

转载 作者:行者123 更新时间:2023-12-01 17:43:23 25 4
gpt4 key购买 nike

我使用 JFrame 和 swings 创建了一个饼图。但我想将饼图转换为图像并保存在桌面/本地路径中。但不知道如何使用 JFrame Pie 创建图像。

package test;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

class Main1 {
double value;
Color color;


public Main1(double value, Color color) {
this.value = value;
this.color = color;
}
}

class MyComponent extends JComponent {
Main1[] slices = { new Main1(1, Color.black), new Main1(1, Color.green),
new Main1(1, Color.yellow), new Main1(1, Color.red) };

MyComponent() {

}
public void paint(Graphics g) {
drawPie((Graphics2D) g, getBounds(), slices);
}

void drawPie(Graphics2D g, Rectangle area, Main1[] slices) {
double total = 0.0D;
for (int i = 0; i < slices.length; i++) {
total += slices[i].value;
}

double curValue = 0.0D;
int startAngle = 0;
for (int i = 0; i < slices.length; i++) {
startAngle = (int) (curValue * 360 / total);
int arcAngle = (int) (slices[i].value * 360 / total);

g.setColor(slices[i].color);
g.fillArc(area.x, area.y, area.width, area.height, startAngle, arcAngle);
curValue += slices[i].value;
}
}
}

public class Main2 {
public JPanel contentPane;
public static void main(String[] argv) {
JFrame frame = new JFrame();
frame.getContentPane().add(new MyComponent());
frame.setSize(300, 200);
frame.setVisible(true);
}

}

最佳答案

创建 Swing 组件的 Image 的基本逻辑是:

Dimension d = component.getSize();
BufferedImage image = new BufferedImage(d.width, d.height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
component.print( g2d );
g2d.dispose();
ImageIO.write(image, ".jpg", new File(...));

您还可以查看Screen Image类用于绘制整个框架、框架上的组件或框架上组件的矩形的便捷方法。

请注意,上述建议假设您正确进行了自定义绘画,这意味着您:

  1. 扩展JPanel
  2. 覆盖paintComponent(...),而不是paint(...)
  3. 调用super.paintComponent(...)

如果你想扩展 JComponent 那么你需要:

  1. 重写paintComponent(...);
  2. 在调用drawPie(...)方法之前先填充组件的背景

关于java - 从 Jframe 创建图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58228791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com