0

アプレットは正常に機能しています。画像とテキストを表示する際に、画像を現在の場所でフェードさせますが、別の場所に再表示してから、後で同じ場所にリロードします。

テストも同様にフェードして動かしたいのですが、

これまでのコードは次のとおりです。初心者であることを許してください。

import java.applet.*;
import java.awt.*;
import java.awt.image.*;
import java.net.*;

public class FadeImage extends Applet {
Image   img, faded;
int level, sign;
MediaTracker tracker;
AlphaFilter f;
FilteredImageSource fis;
String  msg2 = "University of Utah Football";


public void init() {
   setBackground(Color.red);
   setForeground(Color.black);

   level = 0;
 sign =  15;
 tracker = new MediaTracker(this);
 try { 
   img = getImage(new URL(getDocumentBase(), "uofu.jpg"));
   tracker.addImage(img,0);
   tracker.waitForID(0); 
   }
 catch (Exception e) {
   e.printStackTrace();
   }
 f = new AlphaFilter();
 f.setLevel(level);
 fis = new FilteredImageSource(img.getSource(), f) ;

 FadeThread ft = new FadeThread();
 ft.delayedFading(this, 20); 
 ft.start();
 }

public void paint(Graphics g) {
   Font myFont = new Font("Times New Roman", Font.BOLD, 24);
   g.setFont(myFont);
   g.setColor(Color.red);
   g.drawString(msg2, 10, 465);
   if (faded != null) {
    g.drawImage(faded,0,0,this);

    Font myFont2 = new Font("Times New Roman", Font.BOLD, 33);
    g.setFont(myFont2);

   setBackground(Color.black);
   setForeground(Color.white);
       g.setColor(Color.white);
       g.drawString("Get Season tickets now!", 10, 490);
    }
 }

public void fadeIt() {

 Graphics g = this.getGraphics();
 level += sign;
 if (level < 0) {
    level=0; 
    sign = sign * -1;
    }
 if (level > 255) {
    level=255; 
    sign =  sign * -1;
  try {
    Thread.sleep(1000);
    }
  catch (Exception e) {}
    }
 f.setLevel(level);
 if (faded != null) faded.flush();
 faded = this.createImage(fis);
 tracker.addImage(faded,0);
 try { 
   tracker.waitForID(0); 
   }
 catch (Exception ex) {
   ex.printStackTrace();
   }
 repaint();
 }

 class FadeThread extends Thread {
 FadeImage fadeApplet;
 int delay; 

 public void delayedFading(FadeImage f, int delay) {
   this.fadeApplet = f;
   this.delay = delay;
   }

 public void run() {
   while (true) {
     try {
       sleep(delay);
       fadeApplet.fadeIt();
       } 
     catch (Exception e) {
       e.printStackTrace();
       }
     }
   }
 }

class AlphaFilter extends RGBImageFilter {
  private int level;

  public AlphaFilter() { 
    canFilterIndexColorModel = true;
    }

  public void setLevel(int lev) {
    level = lev;
    }

  public int filterRGB(int x, int y, int rgb) {
    int a = level * 0x01000000;
    return (rgb &   0x00ffffff) | a;
    }
  }
}
4

0 に答える 0