コード例 #1
0
ファイル: PhotoThumbnail.java プロジェクト: timabell/gpsprune
 /**
  * Override paint method
  *
  * @see javax.swing.JComponent#paint(java.awt.Graphics)
  */
 public void paint(Graphics inG) {
   super.paint(inG);
   if (_photo != null) {
     // read thumbnail in separate thread
     if (_thumbnail == null && !_loadingImage && !_loadFailed) {
       _loadingImage = true;
       new Thread(this).start();
     }
     // if loading, display message
     if (_loadingImage) {
       inG.setColor(Color.BLACK);
       inG.drawString(LOADING_STRING, 10, 30);
     } else if (_thumbnail != null && !_loadFailed) {
       // Copy scaled, smoothed (and rotated) image into scaled
       int usableWidth = getParent().getWidth() - 10;
       int usableHeight = (_inPanel ? usableWidth : getHeight() - 10);
       Image scaled =
           ImageUtils.rotateImage(
               _thumbnail, usableWidth, usableHeight, _photo.getRotationDegrees());
       int scaleWidth = scaled.getWidth(null);
       int scaleHeight = scaled.getHeight(null);
       // Draw scaled / rotated image to component
       int horizOffset = (getWidth() - scaleWidth) / 2;
       int vertOffset = (getHeight() - scaleHeight) / 2;
       inG.drawImage(scaled, horizOffset, vertOffset, scaleWidth, scaleHeight, null);
       // Special resize behaviour when locked inside details panel
       if (_inPanel && (getHeight() < getWidth() || getHeight() > usableWidth)) {
         Dimension newsize = new Dimension(usableWidth, usableWidth);
         setPreferredSize(newsize);
         setSize(newsize);
         invalidate();
         // Schedule a relayout because the size has changed
         SwingUtilities.invokeLater(
             new Runnable() {
               public void run() {
                 try {
                   Thread.sleep(200);
                 } catch (InterruptedException e) {
                 }
                 getParent().getParent().getParent().validate();
               }
             });
       }
     }
   }
 }