2011-01-13 16 views
0

Ich versuche, ein Bild, das ich auf ein ImagePanel gezeichnet habe (ein JPanel zu erweitern) zu ändern, und es scheint nicht zu funktionieren. Ich habe einen Beispielcode aus dem Internet bekommen, der die Methode paint() überschreibt, ich denke, das könnte das Problem sein, hier ist mein Code.Java Swing: Größe von JPanel mit Bild ändern

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 < 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); 
     } 
    } 
} 

und ich rufe es aus ...

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(); 
} 

(wo Breite und Höhe in dieser blurp ist die neue Breite und Höhe angewandt werden.

Dank.

+1

Was funktioniert nicht? Was erwartest du zu passieren? Gib uns mehr davon - wir werden deine Umgebung nicht neu erschaffen, nur um dir zu helfen. – I82Much

Antwort

1

Sind Sie sicher, dass die Methode paintComponent aufgerufen wird? Versuchen Sie ImagePanel.repaint() am Ende resetImage

anrufen 10