2012-11-21 31 views
0

我有一个动画类,它只画两个圆圈和一个线条(无主要方法),在另一个类中我有一个主要方法,它将动画类作为对象传递,并应显示我绘制了两个圆圈,但没有显示,它只显示窗口中没有任何圆圈或我已经完成的线条,如果我将主要方法放在我的动画类中,它将完美地工作,这是一个不知怎的,用户错误,但我不知道什么或为什么。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); 
} 
} 

Main方法

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

} 
} 

回答

1
  1. 你并不需要(或希望)从JApplet延长,如果你打算为使用JFrame。你更好(无论如何),从JPanel延伸(因为这可以被添加到JAppletJFrame
  2. 你还没有添加任何东西到JFrame,所以,事实上,你的程序正在做你告诉它的。
  3. 您应该很少需要覆盖顶级容器的paint方法(如JAppletJFrame),而应使用JPanel并覆盖它的方法paintComponent
  4. 你应该总是调用super.paintXxx,绘制方法链一起绘制应用程序的各个方面,如果你打破这个链,它将会流下眼泪。

你可能想必须通过

读一些更多的背景

+0

感谢您的信息有网页指示,我使用JApplet的各种tutoritals,因此ÿ我用它。一个特殊的例子是类动画扩展JApplet实现的Runnable,这是我不得不做的后我不知道我将如何做与JPanel,除非当然它是相同的过程 –

+0

这几乎是相同的过程,只是改为它开始包含在一个小程序,你必须提供自己的帧 – MadProgrammer

0

你看上去传递对createAndShowGui(..)方法的错误引用。

试试这个在您的种族等级:

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); 
    } 
} 
+0

救生员谢谢 –

+0

我建议你看看这个简单的引擎的代码: http://www.inf.puc-rio。 BR/livroicc/javaPlay_Engine_Versao_0_28Dec09_10h00.zip 它的网址是: http://www.inf.puc-rio.br/livroicc/ 在那里,你可以找到一些“良好做法”你应该在考虑(如使用BufferStrategy中)。 另一个很好的参考应该是这本书: http://fivedots.coe.psu.ac.th/~ad/jg/ 这是一个有点老了,但对AWT和Java2D的真棒技巧一般。 –