0

初めてのポスターであり、明らかな n00b Java 学生です。私はこれに永遠に取り組んでおり、過去2日間インターネットを精査しましたが、何を試しても結果が得られません. これはもともと JFrame を使用するプログラムであり、アプレットに変換する必要があります。コードはエラーなしで正常にコンパイルされ、アプレットを開始しますが、それだけです。灰色のウィンドウが表示され、「アプレットが開始されました」と表示されます。タイマーで笑顔をしかめっ面に切り替えて再び笑顔に戻すグラフィックを表示することになっています。宿題を終わらせてくれる人を探しているわけではありません (あなたがそうしないと信じています)。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JApplet;
import javax.swing.JPanel;
import javax.swing.Timer;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Dimension;
public class GAPanel extends JApplet {

public void init() {

    System.out.println("In init");
    this.setSize(new Dimension(600, 600));
    setLayout(new BorderLayout());

}

protected class GAPane extends JPanel implements ActionListener {


public final int FACE_FROWN = 1;
public final int FACE_SMILE = 2;    
private int face = FACE_SMILE;
private Timer timer = null;
{
    timer = new Timer(1000, this);
    timer.start();
}

public void paintComponent(Graphics paint) {

    super.paintComponents(paint);
    System.out.println("In paint");
    this.setBackground(java.awt.Color.blue);
    Graphics2D betterpaint = (Graphics2D) paint;
    betterpaint.drawOval(300, 300, 100, 100);

    paint.setColor(Color.yellow);
    betterpaint.fillOval(300, 300, 100, 100);

    paint.setColor(Color.black);
    betterpaint.drawOval(325, 325, 10, 10);

    paint.setColor(Color.white);
    betterpaint.fillOval(325, 325, 10, 10);
    paint.setColor(Color.black);
    betterpaint.drawOval(365, 325, 10, 10);
    paint.setColor(Color.white);
    betterpaint.fillOval(365, 325, 10, 10);
    paint.setColor(Color.black);
    betterpaint.fillOval(329, 329, 3, 3);
    betterpaint.fillOval(368, 329, 3, 3);
    paint.setColor(Color.black);


    switch (face){
        case FACE_FROWN:
         betterpaint.drawArc(325, 350, 50, 45, 0, 180);
            break;
        case FACE_SMILE:
         betterpaint.drawArc(325, 325, 50, 50, 200, 140);
            break;
    }

}


public void actionPerformed(ActionEvent ae) {

    face = face == FACE_FROWN ? FACE_SMILE : FACE_FROWN;

    this.repaint();

        }
    }
}   
4

2 に答える 2

1

JApplet のinit()オーバーライドはまばらです:

public void init() {
    System.out.println("In init");
    this.setSize(new Dimension(600, 600));
    setLayout(new BorderLayout());
}

実際、JApplet の contentPane に GUI を追加するなど、実際に役立つことは何もしていないので、何も表示されないのは理にかなっています。JPanel を作成し、それをinit()メソッド内のアプレットに追加することをお勧めします。アプレットのチュートリアルをまだ行っていない場合は、ここですべて説明されているので、すぐに行ってください。

于 2013-05-06T02:38:47.077 に答える