将图像添加到JFrame

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

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

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

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

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

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

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

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

正如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,然后转到“属性”并找到“图标”属性并选择图像。 如果要更改sizeMode属性然后选择JPictureBox,之后转到Properties并找到“sizeMode”属性,可以选择一些值:

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

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

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