Java 将swing组件绘制为图形
如何将组件(如JPanel)绘制到我选择的图形中, 就好像是屏幕一样 在谷歌上没有运气 我所尝试的:Java 将swing组件绘制为图形,java,swing,graphics,jpanel,paint,Java,Swing,Graphics,Jpanel,Paint,如何将组件(如JPanel)绘制到我选择的图形中, 就好像是屏幕一样 在谷歌上没有运气 我所尝试的: JPanel p = new JPanel(); p.setSize(32, 32); p.setLocation(8, 8); p.add(new JLabel(...)); p.add(new JLabel(...)); p.add(new ImageIcon(...)); Graphics g = getSomeGraphics(); p.paint(g); 但是,最后一条指令会导致
JPanel p = new JPanel();
p.setSize(32, 32);
p.setLocation(8, 8);
p.add(new JLabel(...));
p.add(new JLabel(...));
p.add(new ImageIcon(...));
Graphics g = getSomeGraphics();
p.paint(g);
但是,最后一条指令会导致
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.RepaintManager.getVolatileOffscreenBuffer(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
...
这说明了如何使用panel.paint(g2d)
在buffereImage
中呈现JLabel
实例的现有JPanel
。然后缩放图像并显示在面板下方以供参考
你可以假设我正在绘制一个BuffereImage,事实上,我有时会这样做
请参阅,这也可以创建组件映像。此答案可能会对您有所帮助。.您如何获得
图形
?通常,人们会使用BufferedImage
来处理这种类型的东西,并在上面绘制(使用它的Graphics
)。我假设您基本上是在尝试将组件绘制到图像中,尽管我不太确定。您可能正在使用getGraphics
-不要这样做。查看可能的副本,而不是JFrame,只是一个组件!我必须只画整个画面,而不是整个画面。你可以假设我正在绘制一个BuffereImage,事实上,我有时会这样做。我刚刚意识到这与@Andrew的工作方式相同。如果我不能制作一个JFrame将我的组件放入其中会怎么样?你的示例之所以有效,是因为它将()组件添加到另一个容器JPanel中,但在我的应用程序中,我没有JFrame(),也不能使用任何其他容器。@camickr's可能在这种情况下工作。