将图像添加到JFrame

时间:2013-08-02 23:57:11

标签: java image swing background jframe

所以我将Eclipse与Windows构建器一起使用。我只是想知道无论如何我都可以导入一个显示在JFrame上的图像,我可以轻松地移动并重新调整尺寸,而不是设置位置和大小并绘制它。

4 个答案:

答案 0 :(得分:21)

以下是将图片添加到JFrame的简单示例:

frame.add(new JLabel(new ImageIcon("Path/To/Your/Image.png")));

答案 1 :(得分:14)

Swing中没有提供专门的图像组件(在我看来这很难过)。所以,有几个选择:

  1. 正如@Reimeus所说:使用带有图标的JLabel。
  2. 在窗口构建器中创建一个JPanel,它将表示图像的位置。然后使用您将永远不必更改的几行代码将您自己的自定义图像组件添加到JPanel。他们应该是这样的:

    JImageComponent ic = new JImageComponent(myImageGoesHere);
    imagePanel.add(ic);
    

    其中JImageComponent是一个自创的类,它扩展JComponent,覆盖paintComponent()方法以绘制图像。

答案 2 :(得分:3)

如果您使用Netbeans进行开发,请使用jLabel并更改其图标属性。

答案 3 :(得分:1)

正如martijn-courteaux所说,创建自定义组件是更好的选择。 在C#中,存在一个名为PictureBox的组件,我尝试为Java创建此组件,下面是代码:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;

public class JPictureBox extends JComponent {

    private Icon icon = null;
    private final Dimension dimension = new Dimension(100, 100);
    private Image image = null;
    private ImageIcon ii = null;
    private SizeMode sizeMode = SizeMode.STRETCH;
    private int newHeight, newWidth, originalHeight, originalWidth;

    public JPictureBox() {
        JPictureBox.this.setPreferredSize(dimension);
        JPictureBox.this.setOpaque(false);
        JPictureBox.this.setSizeMode(SizeMode.STRETCH);
    }

    @Override
    public void paintComponent(Graphics g) {
        if (ii != null) {
            switch (getSizeMode()) {
                case NORMAL:
                    g.drawImage(image, 0, 0, ii.getIconWidth(), ii.getIconHeight(), null);
                    break;
                case ZOOM:
                    aspectRatio();
                    g.drawImage(image, 0, 0, newWidth, newHeight, null);
                    break;
                case STRETCH:
                    g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
                    break;
                case CENTER:
                    g.drawImage(image, (int) (this.getWidth() / 2) - (int) (ii.getIconWidth() / 2), (int) (this.getHeight() / 2) - (int) (ii.getIconHeight() / 2), ii.getIconWidth(), ii.getIconHeight(), null);
                    break;
                default:
                    g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
            }
        }
    }

    public Icon getIcon() {
        return icon;
    }

    public void setIcon(Icon icon) {
        this.icon = icon;
        ii = (ImageIcon) icon;
        image = ii.getImage();
        originalHeight = ii.getIconHeight();
        originalWidth = ii.getIconWidth();
    }

    public SizeMode getSizeMode() {
        return sizeMode;
    }

    public void setSizeMode(SizeMode sizeMode) {
        this.sizeMode = sizeMode;
    }

    public enum SizeMode {
        NORMAL,
        STRETCH,
        CENTER,
        ZOOM
    }

    private void aspectRatio() {
        if (ii != null) {
            newHeight = this.getHeight();
            newWidth = (originalWidth * newHeight) / originalHeight;
        }
    }

}

如果要添加图像,请选择JPictureBox,然后转到“属性”并找到“ icon”属性,然后选择一个图像。 如果要更改sizeMode属性,请选择JPictureBox,然后转到“属性”并找到“ sizeMode”属性,可以选择一些值:

  • NORMAL值,图像位于JPictureBox的左上角。
  • STRETCH值导致图像拉伸或缩小以适合JPictureBox。
  • ZOOM值导致图像被拉伸或缩小以适合JPictureBox;但是,可以保持原件的长宽比。
  • CENTER值使图像在客户区居中。

如果您想了解更多有关此主题的信息,可以查看此video

您还可以在GitlabGithub上看到代码。