【问题标题】:Getting JPanel's Image获取 JPanel 的图像
【发布时间】:2011-12-01 18:55:24
【问题描述】:

我在从屏幕外的 JPanel 创建 BufferedImage 时遇到问题。具体来说,我正在尝试绘制 JPanel 的图像(其中包含一些 Java3D 元素)作为我正在处理的应用程序的背景图像。

我发现几个线程描述了如何通过将 JPanel 绘制到 BufferedImage 的图形上下文来获取 JPanel 的图像,但是当我绘制 BufferedImage 时,我得到的只是一个大的白色矩形。

这是我的代码:

SimpleWorld j3DPanel; // a custom JPanel that contains some simple Java3D elements

// CONSTRUCTOR

public GameBackgroundObject()
{
    super();

    // Here I set up a JPanel that contains some Java3D elements.

    j3DPanel = new SimpleWorld();
    j3DPanel.setSize(mainLevel.SCREENW, mainLevel.SCREENH);
    j3DPanel.setBounds(0,0,mainLevel.SCREENW, mainLevel.SCREENH);
    j3DPanel.doLayout();
    j3DPanel.validate();
} 


protected void draw(Graphics2D parentComponentGraphics, ...)
{
    super.draw(parentComponentGraphics, ...);

    int w = j3DPanel.getWidth();
    int h = j3DPanel.getHeight();

    BufferedImage j3DImg = new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = j3DImg.createGraphics();
    j3DPanel.paint(g);

    parentComponentGraphics.drawImage(j3DImg, null, null);

}

另外,我尝试将我的 JPanel 添加到 JFrame 的内容中。它在那里工作并正确显示渲染的 Java3D 元素。但是,每当我尝试获取 JPanel 的 BufferedImage 并绘制该图像时,我都会得到这个大的白色矩形。

【问题讨论】:

    标签: image swing jpanel bufferedimage java-3d


    【解决方案1】:

    绘制 Java 3D 场景可能会失败,因为它的 Canvas3D 组件是重量级的。使用轻量级面板 'com.sun.j3d.exp.swing.JCanvas3D' 可能会解决这个问题。它的使用有点棘手。请参阅相应的 Java 3D 示例“JCanvas3DExample”或尝试从此处http://www.interactivemesh.org/testspace/j3dmeetsswing.html#leightweight

    的派生作品之一

    【讨论】:

    • 我稍后会研究这个。谢谢!
    【解决方案2】:

    尝试调用:

    j3DPanel.paintComponent(g);
    

    代替:

    j3DPanel.paint(g);
    

    【讨论】:

    • 通常是一个足够好的猜测 - 但不是在这里 :-) 你真的想要绘制整个面板,包括它的边框和子项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 2011-12-12
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多