アプレットは正常に機能しています。画像とテキストを表示する際に、画像を現在の場所でフェードさせますが、別の場所に再表示してから、後で同じ場所にリロードします。
テストも同様にフェードして動かしたいのですが、
これまでのコードは次のとおりです。初心者であることを許してください。
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;
}
}
}