2012-11-21 33 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的真棒技巧一般。 –