如何将图像添加到JPanel?

一曲冷凌霜 提交于 2020-03-06 18:04:22

我有一个JPanel ,我想向其中添加即时生成的JPEG和PNG图像。

到目前为止,我在Swing教程中看到的所有示例,特别是在Swing示例中,都使用ImageIcon

我将这些图像生成为字节数组,它们通常比示例中使用的通用图标大,尺寸为640x480。

  1. 使用ImageIcon类在JPanel中显示该大小的图像时是否存在任何(性能或其他)问题?
  2. 通常的做法是什么?
  3. 如何不使用ImageIcon类将图像添加到JPanel?

编辑 :对教程和API的更仔细的检查表明,您不能将ImageIcon直接添加到JPanel。 而是通过将图像设置为JLabel的图标来实现相同的效果。 只是感觉不对...


#1楼

我认为没有必要继承任何东西。 只需使用Jlabel。 您可以将图像设置为Jlabel。 因此,调整Jlabel的大小,然后用图像填充它。 没关系。 这就是我的方法。


#2楼

JLabel imgLabel = new JLabel(new ImageIcon("path_to_image.png"));

#3楼

如果使用的是JPanels,则可能正在使用Swing。 尝试这个:

BufferedImage myPicture = ImageIO.read(new File("path-to-file"));
JLabel picLabel = new JLabel(new ImageIcon(myPicture));
add(picLabel);

该图像现在是一个摆动组件。 与其他组件一样,它也会受到布局条件的约束。


#4楼

您可以继承JPanel的子类-这是我的ImagePanel的摘录,它将图像放在顶部/左侧,顶部/右侧,中间/中间,底部/左侧或底部/右侧5个位置中的任何一个位置:

protected void paintComponent(Graphics gc) {
    super.paintComponent(gc);

    Dimension                           cs=getSize();                           // component size

    gc=gc.create();
    gc.clipRect(insets.left,insets.top,(cs.width-insets.left-insets.right),(cs.height-insets.top-insets.bottom));
    if(mmImage!=null) { gc.drawImage(mmImage,(((cs.width-mmSize.width)/2)       +mmHrzShift),(((cs.height-mmSize.height)/2)        +mmVrtShift),null); }
    if(tlImage!=null) { gc.drawImage(tlImage,(insets.left                       +tlHrzShift),(insets.top                           +tlVrtShift),null); }
    if(trImage!=null) { gc.drawImage(trImage,(cs.width-insets.right-trSize.width+trHrzShift),(insets.top                           +trVrtShift),null); }
    if(blImage!=null) { gc.drawImage(blImage,(insets.left                       +blHrzShift),(cs.height-insets.bottom-blSize.height+blVrtShift),null); }
    if(brImage!=null) { gc.drawImage(brImage,(cs.width-insets.right-brSize.width+brHrzShift),(cs.height-insets.bottom-brSize.height+brVrtShift),null); }
    }

#5楼

  1. 不应有任何问题(对于非常大的图像,可能会遇到任何一般性问题)。
  2. 如果您正在谈论将多个图像添加到一个面板中,那么我将使用ImageIcon 。 对于单个图像,我会考虑制作一个JPanel的自定义子类,并重写其paintComponent方法以绘制图像。
  3. (请参阅2)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!