Java 将图像添加到JFrame

Java 将图像添加到JFrame,java,image,swing,background,jframe,Java,Image,Swing,Background,Jframe,因此,我将Eclipse与Windows builder一起使用。我只是想知道我是否可以导入一张显示在JFrame上的图像,这样我就可以轻松地四处移动并重新调整大小,而不是设置位置和大小并绘制它。下面是一个向JFrame添加图像的简单示例: frame.add(new JLabel(new ImageIcon("Path/To/Your/Image.png"))); Swing中没有提供专门的映像组件(我认为这很遗憾)。因此,有几个选择: 正如@Reimeus所说:使用带有图标的JLabel

因此,我将Eclipse与Windows builder一起使用。我只是想知道我是否可以导入一张显示在JFrame上的图像,这样我就可以轻松地四处移动并重新调整大小,而不是设置位置和大小并绘制它。

下面是一个向JFrame添加图像的简单示例:

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

Swing中没有提供专门的映像组件(我认为这很遗憾)。因此,有几个选择:

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

    JImageComponent ic = new JImageComponent(myImageGoesHere);
    imagePanel.add(ic);
    
    其中,JImageComponent是一个自行创建的类,它扩展了
    JComponent
    ,覆盖了
    paintComponent()
    方法来绘制图像


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

    正如martijn Courtaux所说,创建自定义组件是更好的选择。 在C#中存在一个名为的组件,我尝试为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,然后转到Properties并找到“icon”属性并选择图像。 如果要更改sizeMode属性,请选择JPictureBox,然后转到Properties并查找“sizeMode”属性,您可以选择一些值:

    • 正常值时,图像位于JPictureBox的左上角
    • “拉伸”值使图像拉伸或收缩以适合JPictureBox
    • 缩放值使图像拉伸或收缩以适合JPictureBox;但是,原始图形中的纵横比保持不变
    • “中心”值使图像在客户端区域居中
    如果您想了解有关此主题的更多信息,可以选中此项


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

    将图像添加到
    JLabel
    这是一个好主意,谢谢。这对我很有效;我是新手,为什么只有上网本?Java就是Java,不管您使用的是netbeans、eclipse还是其他任何东西。@AndreaOggioni我说过只有netbeans吗?开发Java应用程序有几种方法。使用Netbeans只是其中之一。我的答案适用于那些使用Netbeans的人。但它也可以应用于其他IDE。