提问者:小点点

如何导出图像而不显示在Java摇摆


我有下面的probelm代码(它是简化的测试版本):

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;

public class Example {
    JFrame frame;
    JPanel background;
    JPanel top;
    JPanel center;
    JPanel bottom;

    public Example() {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1016, 639);
        frame.setResizable(false);

        background = new JPanel();
        background.setLayout(new BoxLayout(background, BoxLayout.Y_AXIS));
        background.setPreferredSize(new Dimension(1000, 200));

        top = new JPanel();
        top.setPreferredSize(new Dimension(1000, 200));
        top.setBackground(Color.BLACK);

        center = new JPanel();
        center.setPreferredSize(new Dimension(1000, 200));
        center.setBackground(Color.WHITE);

        bottom = new JPanel();
        bottom.setPreferredSize(new Dimension(1000, 200));
        bottom.setBackground(Color.BLUE);

        background.add(top);
        background.add(center);
        background.add(bottom);

        frame.add(background);

        frame.setVisible(true);
    }


   public void getImage() {
        BufferedImage img = new BufferedImage(1000, 600, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = img.createGraphics();
        background.paint(g2d);
        g2d.dispose();
        try {
            ImageIO.write(img, "png", new File("frame_2.png"));
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String... args) {
        Example ex = new Example();
        ex.getImage();
    }
 }

我想做的只是将JPanel后台导出为png文件,而不显示框架。 问题是,现在它是有效的,但如果我注释行:

Frame.SetVisible(true);

所有我得到的是全黑的png文件,与正确的大小。

如果setVisible是false,我认为组件没有被正确地绘制,我在互联网上查看了一下,但是根据我使用swing的短暂经验,我没有发现任何工作的东西。 也许这里有人能帮忙?


共1个答案

匿名用户

Swing组件没有大小,除非您将框架打包()或在框架上调用setVisible(true),因为还没有调用布局管理器。

因此,在调用getImage()方法之前,尝试调用pack()。

您还可以尝试使用Screen Image,它是一个可重用的类,允许您创建桌面,框架或框架上任何组件的图像。 它将自动处理组件大小的设置,即使它们在框架上还不可见。