Java “按钮”;“保存”;保存空白画布

Java “按钮”;“保存”;保存空白画布,java,canvas,applet,bufferedimage,Java,Canvas,Applet,Bufferedimage,这是我的简单图形编辑器的部分代码。这应该会保存我绘制的图像,但它会保存一个空白画布。我做错了什么 BufferedImage bi = new BufferedImage(center.getWidth(), center.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bi.createGraphics(); center.printAll(g2); g2.dispose(); JFileChooser jfc = n

这是我的简单图形编辑器的部分代码。这应该会保存我绘制的图像,但它会保存一个空白画布。我做错了什么

BufferedImage bi = new BufferedImage(center.getWidth(), center.getHeight(), BufferedImage.TYPE_INT_RGB);  
Graphics2D g2 = bi.createGraphics();
center.printAll(g2);  
g2.dispose();
JFileChooser jfc = new JFileChooser();
int ret = jfc.showDialog(null, "Save file");                
if (ret == JFileChooser.APPROVE_OPTION) {
    File outputFile = jfc.getSelectedFile();
    ImageIO.write(bi, "BMP", outputFile);

在绘制组件时,必须临时禁用双缓冲,并且不可显示的组件(不属于可见帧的组件)需要先布局(否则它们的大小为0x0)

以下代码将任何组件绘制到BuffereImage中:

public static BufferedImage paint(Component component) {
    RepaintManager repaintManager = RepaintManager.currentManager(component);
    boolean wasDoubleBuffered = repaintManager.isDoubleBufferingEnabled();
    try {
        repaintManager.setDoubleBufferingEnabled(false);
        Dimension size = component.getSize();
        if (!component.isDisplayable()) {
            if (size.width <= 0 || size.height <= 0) {
                size = component.getPreferredSize();
                component.setSize(component.getPreferredSize());
            }
            synchronized (component.getTreeLock()) {
                layoutComponent(component);
            }
        }

        BufferedImage image = createCompatibleImage(size.width, size.height);
        Graphics2D g2 = image.createGraphics();
        component.paint(g2);
        g2.dispose();
        return image;
    }
    finally {
        repaintManager.setDoubleBufferingEnabled(wasDoubleBuffered);
    }
}

private static void layoutComponent(Component component) {
    component.doLayout();
    if (component instanceof Container) {
        for (Component child : ((Container) component).getComponents()) {
            layoutComponent(child);
        }
    }
}

public static GraphicsConfiguration getGraphicsConfiguration() {
    return GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
}

public static BufferedImage createCompatibleImage(int width, int height) {
    return getGraphicsConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
}
公共静态缓冲区图像绘制(组件){
RepaitManager RepaitManager=RepaitManager.currentManager(组件);
布尔值wasDoubleBuffered=RepaitManager.isDoubleBufferingEnabled();
试一试{
repaitmanager.setDoubleBufferingEnabled(false);
维度大小=组件。getSize();
如果(!component.isDisplayable()){
如果(尺寸、宽度)