Получение изображения JPanel - PullRequest
       38

Получение изображения JPanel

0 голосов
/ 01 декабря 2011

У меня проблемы с созданием BufferedImage из JPanel вне экрана.В частности, я пытаюсь нарисовать изображение JPanel (которое содержит некоторые элементы Java3D) в качестве фонового изображения для приложения, над которым я работаю.

Я нашел несколько потоков, описывающих, как получить изображение JPanel, рисуя JPanel в графический контекст BufferedImage, но когда я рисую BufferedImage, все, что я получаю, это большой белый прямоугольник.1004 * Вот мой код:

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.Однако я просто получаю этот большой белый прямоугольник всякий раз, когда пытаюсь получить BufferedImage JPanel и нарисовать это изображение.

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

Рисование Java-сцены 3D, возможно, завершается неудачно, потому что ее компонент Canvas3D имеет большой вес. Использование облегченной панели com.sun.j3d.exp.swing.JCanvas3D может решить эту проблему. Его использование немного сложнее. Смотрите соответствующий пример Java 3D 'JCanvas3DExample' или попробуйте одну из производных работ здесь http://www.interactivemesh.org/testspace/j3dmeetsswing.html#leightweight

0 голосов
/ 02 декабря 2011

Попробуйте позвонить:

j3DPanel.paintComponent(g);

вместо:

j3DPanel.paint(g);
...