java - JApplet 将启动但未初始化

标签 java swing applet jframe japplet

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

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

        }
    }
}   

最佳答案

您的 JApplet 的 init() 覆盖有点稀疏:

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

事实上,您并没有在其中做任何真正有用的事情,例如向 JApplet 的 contentPane 添加 GUI,因此什么也不会显示是有道理的。我建议您这样做,创建 JPanel 并将其添加到 init() 方法中的小程序中。如果您还没有阅读过小程序教程,那么您现在就需要这样做,因为那里对此进行了很好的解释。

关于java - JApplet 将启动但未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16391242/

相关文章:

java - 在谷歌开发者控制台上注册网络应用程序

java - OS X Gatekeeper 的代码签名 Java 应用程序

java - 如何在不扩展 JFrame 的情况下设置窗口大小?

java - 如何在java中使面板向左或向右滑动?

java - 如何在reactjs中使用java小程序

java - 在批处理文件中回答 keytool 的密码

java - 如何将 OpenCV WebRTC Stream 导入 Java

java - 使所有按钮大小相同

java - "uses unchecked or unsafe operation"警告

java - 删除 RecyclerView 中的项目