title: Java Swing: Resizing JPanel with Image
body: <p>I'm attempting to resize an Image I've drawn onto an ImagePanel (extending a JPanel) and it doesn't seem to be working. I've gotten some sample code from off the internet that overrides the components paint() method, I'm thinking this might be the problem, here's my code.</p>
  
  <pre><code>public void paintComponent(Graphics g) {
      super.paintComponent(g);
      if (img != null) { // Scale it by width int scaledWidth = (int)((img.getWidth() * getHeight()/img.getHeight()));
          // If the image is not off the screen horizontally...
          if (scaledWidth &lt; getWidth()) {
              // Center the left and right destination x coordinates.
  
              int leftOffset = getWidth() / 2 - scaledWidth / 2;
              int rightOffset = getWidth() / 2 + scaledWidth / 2;
              g.drawImage(img, leftOffset, 0, rightOffset, getHeight(), 0, 0, img.getWidth(), img.getHeight(), null);
          }
          // Otherwise, the image width is too much, even scaled
          // So we need to center it the other direction
          else {
              int scaledHeight = (img.getHeight() * getWidth()) / img.getWidth();
  
              int topOffset = getHeight() / 2 - scaledHeight / 2;
              int bottomOffset = getHeight() / 2 + scaledHeight / 2;
  
              g.drawImage(img, 0, topOffset, getWidth(), bottomOffset, 0, 0, img.getWidth(), img.getHeight(), null);
          }
      }
  }
  </code></pre>
  
  <p>and I'm calling it from...</p>
  
  <pre><code>public void resetImage(double width, double height) {
       BufferedImage scaledImage = new BufferedImage((int)width, (int)height,BufferedImage.TYPE_INT_ARGB);
       // Paint scaled version of image to new image
       Graphics2D graphics2D = scaledImage.createGraphics(); 
       graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
  
       this.setSize((int)img.getWidth(), (int)img.getHeight());
       graphics2D.drawImage(this.img, 0, 0, (int)width, (int)height, null); graphics2D.dispose(); 
  }
  </code></pre>
  
  <p>(where width and height in this blurp are the new width and height to be applied.</p>
  
  <p>Thanks.</p>