JApplet将启动但不会初始化

时间:2013-05-06 02:33:47

标签: java swing applet jframe japplet

第一次海报和明显的n00b java学生。我一直在研究这个问题,在过去的两天里搜索互联网,我尝试的任何事情都没有结果。这最初是一个使用JFrame的程序,我需要将它转换为Applet。代码编译好没有错误并启动applet,但就是这样。我看到一个灰色的窗口并说“Applet Started”。它应该显示将微笑切换为皱眉并再次返回计时器的图形。我不是在找任何人完成我的作业(因为我相信你不会)我只需要一些指导。

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

        }
    }
}   

2 个答案:

答案 0 :(得分: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()方法中的applet中。如果你还没有完成applet教程,那么你现在就想要这样做,因为这里都有很好的解释。

答案 1 :(得分:0)

虽然JFrame和JApplet是不同的实用程序,但它们共享许多基本功能,您需要使用它们来实际初始化它们。从我所看到的,你已经创建了一个JPanel来保存你的笑脸代码,但是你从未真正指定它作为applet的内容窗格。这可能是您看到灰色屏幕的原因:您的小程序已创建,但未填充任何内容。

setContentPane(new GAPane());

我认为应该这样做。虽然还有很多其他的东西我认为你可能会遇到这个代码如果你只是在不了解JApplets的情况下将其切换到JFrame。看看这个Oracle页面,它有一个很好的文档和一些例子:

http://docs.oracle.com/javase/tutorial/uiswing/components/applet.html