【问题标题】:Adding image to JFrame将图像添加到 JFrame
【发布时间】:2013-08-04 08:52:36
【问题描述】:

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

【问题讨论】:

  • 将图片添加到JLabel
  • 这是个好主意,谢谢。

标签: java image swing background jframe


【解决方案1】:

这是一个将图像添加到JFrame 的简单示例:

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

【讨论】:

    【解决方案2】:

    Swing 中没有提供专门的图像组件(我认为这很可悲)。所以,有几个选择:

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

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

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

    【讨论】:

      【解决方案3】:

      如果你使用 Netbeans 开发,请使用 JLabel 并更改其图标属性。

      【讨论】:

      • 这对我很有效;我是新手。
      • 为什么只有netbeans? Java就是Java,不管你用的是netbeans、eclipse还是别的什么的。
      • @AndreaOggioni 我有没有提到只有 Netbeans?开发 Java 应用程序有多种方法。使用 Netbeans 只是其中之一。我的答案是针对那些使用 Netbeans 的人。但它也可以应用其他 IDE。
      【解决方案4】:

      正如 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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        • 1970-01-01
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多