【问题标题】:How to fit Image size to JFrame Size?如何使图像大小适合 JFrame 大小?
【发布时间】:2012-10-13 20:31:44
【问题描述】:

我有一个JPanel 到一个JFrame。我在JPanel 上加载了一张图片,但它只显示了图片的一部分:这是我所做的代码的一部分:

JPanel panelImg = new JPanel()
{
    public void paintComponent(Graphics g)
    {
        Image img = new ImageIcon("Welcome.png").getImage();
        Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
        setPreferredSize(size);
        setMinimumSize(size);
        setMaximumSize(size);
        setSize(size);
        setLayout(null);
        g.drawImage(img, 0, 0, null);
    }
};
mainFrame.add(panelImg);

这就是它的样子:

全图是这样的:

有没有办法将图片缩放到JFrames 大小?提前致谢

【问题讨论】:

标签: java image swing jframe jpanel


【解决方案1】:

首先,我不会在paintComponent 方法中加载图像,这个方法被反复调用(有时是快速连续调用),你不想做任何需要时间执行的事情或不必要地消耗资源

查看Java: maintaining aspect ratio of JPanel background image 获取有关将图像填充/拟合到给定区域的建议

【讨论】:

【解决方案2】:

您希望drawImage() 可以扩展到目标容器。有关替代方案,请参阅引用 here 的文章。例如,

g.drawImage(img, 0, 0, getWidth(), getHeight(), this);

【讨论】:

    【解决方案3】:
    import java.awt.Graphics;
    import java.awt.Image;
    import javax.swing.JPanel;
    
    public class ImagePanel extends JPanel {
    
        Image image;
    
        public void setBackground(Image image) {
            this.image = image;
        }
    
        @Override
        public void paintComponent(Graphics G) {
            super.paintComponent(G);
            G.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
        }
    
    }
    

    然后使用ImagePanel对象方法SetBackgroundlike

    imagePanel1.SetBackGround(ImageIO.read(new File("extensions/images/background.jpg")));
    

    【讨论】:

    • JPanel 默认是不透明的。因此,您对 paintComponent 的实现可能会违反其不透明性合同(如果图像不是完全不透明的)。要修复,请调用 super.paintComponent 或将 opaque 属性设置为 false。顺便说一句:请学习 java 命名约定并遵守它们。
    • 对不起,命名约定是什么意思! ://
    • 在您最喜欢的搜索引擎的搜索字段中输入 java 命名约定 怎么样?或者阅读 swing tag wiki 中引用的教程中的相应章节。或者......无论如何:有规则如何命名类,字段,方法,一切:你违反了方法命名之一,以大写字母开头。
    • 我应该删除这个答案吗?! :D :D
    • 编辑和重命名(改成不会意外覆盖超级方法的东西:-)
    【解决方案4】:

    你可以试试这个:

    Image img = new ImageIcon(ImageIO.read(new File("welcome.png"))
                                   .getScaledInstance(WIDTH, HEIGHT, Image.SCALE_SMOOTH)));
    

    【讨论】:

      【解决方案5】:

      很简单。按照这个例子,

      public class BasePanel extends JPanel {
      
      ImageIcon backImage;
      public BasePanel() {
          backImage = new ImageIcon("src/images/welcome.png");
      }
      
      @Override
      protected void paintComponent(Graphics g) {
          BufferedImage scaledImage = getScaledImage();
          super.paintComponent(g);
          g.drawImage(scaledImage, 0, 0, null);
      }
      
      private BufferedImage getScaledImage(){
          BufferedImage image = new BufferedImage(getWidth(),getHeight(), BufferedImage.TYPE_INT_RGB);
          Graphics2D g2d = (Graphics2D) image.createGraphics();
          g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY));
          g2d.drawImage(backImage.getImage(), 0, 0,getWidth(),getHeight(), null);
      
          return image;
      }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2013-11-22
        • 2015-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-04
        • 2014-05-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多