JApplet没有显示绘制或绘制方法

时间:2012-11-21 00:51:22

标签: java user-interface animation paint japplet

我有一个动画类,它只绘制两个圆和一条线(没有主方法),在另一个类中我有一个主方法,它将动画类作为一个对象传递,并且应该显示我绘制的两个圆但是它没有显示,它只显示窗口没有圆圈或我已经完成的线,如果我将主方法放在我的动画类中它将完美地工作,这是一个用户错误不知何故但我是不确定是什么或为什么。

单独类中的动画方法。

import javax.swing.*;
import java.awt.geom.*;
import java.awt.*;
import java.awt.Graphics.*;
import javax.swing.JApplet;

public class Animation extends JApplet{

    public void init(){

}
public static void createAndShowGUI(JApplet j)
{
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.pack();
    frame.setVisible(true);
    frame.setSize(500,500);

    frame.getContentPane().add("Center", j);
}

public void paint(Graphics g){
    Graphics2D g2 = (Graphics2D) g;
    int x=50;
    int y=10;
    g2.setPaint(Color.black);

    g2.draw(new Line2D.Double(x,y,50,400));

    drawT(g2);
    drawH(g2);  
        //create a method that translates
    }

public void drawH(Graphics2D g2)
{
    int y=25;
    g2.setColor(Color.blue);
    drawCircle(y,g2);
}

public void drawT(Graphics2D g2){
    int y=100;
    g2.setColor(Color.green);
    drawCircle(y,g2);
}/*
public void raceLoop(){
    long startingTime = System.currentTimeMillis();
    long cumTime=startingTime;
    while(mve.hposition<70){
        long timePassed = System.currentTimeMillis()-cumTime;   
        cumTime += timePassed;
        //mve.update(timePassed);   
    }
}*/

public void drawCircle(int y, Graphics2D g2)
{
g2.fillOval(50,y,50,50);
}
}

主要方法

import javax.swing.*;
import java.awt.geom.*;
import java.awt.*;
import java.awt.Graphics.*;
import javax.swing.JApplet;

public class Race {

public static void main(String[] args) {
    JApplet applet = new JApplet();
    Animation animie = new Animation();
    animie.createAndShowGUI(applet);

}
}

2 个答案:

答案 0 :(得分:1)

  1. 如果您要使用JApplet,则不需要(或想要)从JFrame延伸。您(从任何情况下)都优于JPanel(因为这可以添加到JAppletJFrame
  2. 您没有向JFrame添加任何内容,因此,实际上,您的程序正在按照您的说法进行操作。
  3. 您应该很少需要覆盖顶级容器的paint方法(例如JAppletJFrame),而是使用JPanel并覆盖它paintComponent 1}}方法。
  4. 你应该总是调用super.paintXxx,绘制方法链在一起绘制应用程序的各个方面,如果你打破这个链,它将会流泪。
  5. 您可能希望阅读

    更多背景

答案 1 :(得分:0)

看起来你正在向createAndShowGui(..)方法传递错误的引用。

在Race类上试试这个:

import javax.swing.*;
import java.awt.geom.*;
import java.awt.*;
import java.awt.Graphics.*;
import javax.swing.JApplet;

public class Race {

    public static void main(String[] args) {
        Animation animie = new Animation();
        animie.createAndShowGUI(animie);
    }
}