Java IconImage或g.drawImage在jpanel上显示图像

Java IconImage或g.drawImage在jpanel上显示图像,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,由于我不熟悉JavaSwing,有一次我想创建一个JFrame,从通过USB连接的网络摄像头捕获帧,然后在JFrame上显示内容。为了实现这一点,我阅读了一些帖子,按照帖子的建议,我创建了一个JLabel,从网络摄像头捕获的每一帧都转换为图像,创建了IconImage,并将其添加到JLabel,最后将jabel添加到JFrame。结果是,只有从网络摄像头拍摄的第一张图像被添加到JFrame,而JFrame上的图像永远不会改变,这不是我想要的 在搜索和阅读之后,我发现,要做到这一点,我必须创建一个

由于我不熟悉Java
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()刷新缓存。也看到