调整图像大小以使其适合JPanel网格

时间:2014-04-20 14:40:08

标签: java image swing resize

我有一个JPanel,网格布局为(5,7),5行,7列。

当我尝试将图像添加到网格面板时

    Img = new ImageIcon("ImagePath");
    JLabel Label = new JLabel(Img);
    add(picLabel);

图像对于我的网格面板来说太大了,只有一小部分图像显示在网格面板上。

如何将图像添加到网格中,以便将图像调整为网格大小。

2 个答案:

答案 0 :(得分:3)

不要使用JLabel和ImageIcon。相反,我会

  • 创建一个扩展JPanel的类
  • 覆盖其paintComponent(Graphics g)方法
  • 请记得在我的覆盖
  • 中调用super的方法
  • 给它一个BufferedImage字段,比如叫做image
  • 通过构造函数或setter参数或两者将图像传递到类中。
  • 调用g.drawImage(image,....)重载,允许重新调整图像大小,使其填充JPanel。

链接:

查看此重载:

public abstract boolean drawImage(Image img,
            int x,
            int y,
            int width,
            int height,
            ImageObserver observer)

或者这个:

public abstract boolean drawImage(Image img,
            int dx1,
            int dy1,
            int dx2,
            int dy2,
            int sx1,
            int sy1,
            int sx2,
            int sy2,
            ImageObserver observer) 

修改
例如,

// big warning: code not compiled nor tested
public class ImagePanel extends JPanel {
  private BufferedImage image;

  public ImagePanel(BufferedImage image) {
    this.image = image;
  }

  @Override
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (image != null) {
      g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
    }
  }
}

答案 1 :(得分:2)

  

如何将图像添加到网格中,以便将图像调整为网格大小。

查看达里尔的Stretch Icon

它将动态调整自身大小以填充标签可用的空间。

然后,Icon可用于带有Icon而无需自定义绘图的on组件。