Java 绘制屏幕外图像

Java 绘制屏幕外图像,java,swing,user-interface,Java,Swing,User Interface,我设法在图像上绘制GUI组件。但是,只能通过将JFrame设置为可见来实现。JPanel.setVisible()和validate()没有任何效果。如果注释掉JFrame,它将绘制一个空图像 当我需要一些功能来进行屏幕外GUI绘制,然后弹出一个JFrame或者运行这些代码的服务器没有屏幕或图形卡时,这是不整洁的 请帮忙,非常感谢 import java.awt.BorderLayout; import java.awt.image.BufferedImage; import java.io.F

我设法在图像上绘制GUI组件。但是,只能通过将
JFrame
设置为可见来实现。
JPanel.setVisible()
validate()
没有任何效果。如果注释掉
JFrame
,它将绘制一个空图像

当我需要一些功能来进行屏幕外GUI绘制,然后弹出一个
JFrame
或者运行这些代码的服务器没有屏幕或图形卡时,这是不整洁的

请帮忙,非常感谢

import java.awt.BorderLayout;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Snippet {

    public static void main(String[] args) {
        JButton test = new JButton("Test Button center");
        JButton test2 = new JButton("Test Button2 south");
        JButton test3 = new JButton("Test Button3 at east");
        BorderLayout bl = new BorderLayout();
        JPanel jp = new JPanel(bl, false);
        jp.add(test2,BorderLayout.SOUTH);
        jp.add(test, BorderLayout.CENTER);

        jp.add(test3, BorderLayout.EAST);

//      jp.validate();
//      jp.setVisible(true);
//      jp.show();
        JFrame jf = new JFrame();
        jf.getContentPane().add(jp, BorderLayout.CENTER);
        jf.pack();
        jf.setVisible(true);
        //jp.setBounds(10, 10, 400, 400);
        BufferedImage b = new BufferedImage(jf.getWidth(), jf.getHeight(), BufferedImage.TYPE_INT_ARGB);
        jp.paintAll(b.createGraphics());


        File output = new File("f:/screenie.png");

        try
        {
            ImageIO.write(b, "png", output);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
我管理在图像上绘制GUI组件,但是,只有将Jframe设置为可见

组件需要有一个尺寸,然后才能涂漆。默认情况下,组件的大小为(0,0),因此没有要绘制的内容。当您调用pack()或setVisible(…)-这将为您调用pack()-然后确定每个组件的大小


查看可用于创建任何组件的图像,并在创建图像之前为您设置大小

对不起,你的问题不清楚。您的问题是如何在没有屏幕或图形卡的系统上将组件渲染为图像?似乎是这样。或者只是将屏幕打印成一个图像,并将其发送到客户端。这是第一步:在没有屏幕或图形卡的系统上将组件渲染成一个图像,那么为什么“JPanel.setVisible(true);”不行?除了顶级组件(JFrame、JDialog)之外的所有Swing组件都已经可见,因此调用setVisible()在面板上没有任何作用。您是否在声明之后显示了面板的大小?在调用该语句之前,是否显示了面板的可见性?