Java IconImage或g.drawImage在jpanel上显示图像
由于我不熟悉JavaJava IconImage或g.drawImage在jpanel上显示图像,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,由于我不熟悉JavaSwing,有一次我想创建一个JFrame,从通过USB连接的网络摄像头捕获帧,然后在JFrame上显示内容。为了实现这一点,我阅读了一些帖子,按照帖子的建议,我创建了一个JLabel,从网络摄像头捕获的每一帧都转换为图像,创建了IconImage,并将其添加到JLabel,最后将jabel添加到JFrame。结果是,只有从网络摄像头拍摄的第一张图像被添加到JFrame,而JFrame上的图像永远不会改变,这不是我想要的 在搜索和阅读之后,我发现,要做到这一点,我必须创建一个
Swing
,有一次我想创建一个JFrame
,从通过USB连接的网络摄像头捕获帧,然后在JFrame
上显示内容。为了实现这一点,我阅读了一些帖子,按照帖子的建议,我创建了一个JLabel
,从网络摄像头捕获的每一帧都转换为图像,创建了IconImage
,并将其添加到JLabel
,最后将jabel
添加到JFrame
。结果是,只有从网络摄像头拍摄的第一张图像被添加到JFrame
,而JFrame
上的图像永远不会改变,这不是我想要的
在搜索和阅读之后,我发现,要做到这一点,我必须创建一个扩展JPanel
的类,并实现方法paintcomponent()
,我从网络摄像头捕获的每一帧都会传递给扩展JPanel
的类,并使用g.drawImage()
我的问题是,为什么我不能使用IconImage
频繁更改图像?
是
g.drawImage()
是在JPanel
上显示图像的唯一方法?使用Swing定时器和JLabel
或Image
组合来渲染图像。计时器
用作更新UI的手段。JLabel
和paintComponent
都有优点和缺点,但两者都可以达到相同的效果。你会选择哪一个取决于你希望通过图像实现什么。如果您只想显示它们,JLabel
非常简单。主要问题很可能是默认情况下,ImageIcon
中的图像会被缓存。为了真正更新ImageIcon
中的图像(即,如果图像更改,但文件名保持不变),必须通过调用ImageIcon.getImage().flush()刷新缓存代码>。也看到