2016-03-23 14 views
0

私はこの非常に単純なコードを試しています。実行されますが、アニメーションは表示されません。私はアニメーションには新しいので、私は何が欠けているのかわかりません。アニメーションが表示されない

package sample; 

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 

public class Sample extends JPanel implements ActionListener { 
    Timer tm = new Timer(5, this); 
    int x = 0, Velx = 5; 

    public void paint(Graphics g) { 
     g.setColor(Color.RED); 
     g.fillRect(x, 30, 50, 50); 
     tm.start(); 
    } 

    public void actionPerformed(ActionEvent e) { 
     x = x + Velx; 
     repaint(); 
    } 

    public static void main(String[] args) { 
     Sample X = new Sample(); 
     JFrame a = new JFrame(); 
     a.setTitle("Rectangle RED"); 
     a.setSize(500,500); 
     a.setVisible(true); 
    } 
} 

答えて

1
Sample X = new Sample(); 

Xフレームに追加されることはありません。 Xをフレームに追加する方法については、最初のヒント(太字の部分)を参照してください。

その他のヒント:

  • Sampleはキャンバスのための賢明なサイズを返すようにgetPreferredSize()方法を@Override必要があります。それで、a.setSize(500,500);と代わりにa.add(X); a.pack();を除いて、フレームをレンダリングを表示するのに正確なサイズにすることができます。
  • Timerは、ペイント方法以外の場所で開始する必要があります。私はコンストラクタのために行くだろう。
  • JComponentのカスタムペインティングはpaintComponent(Graphics)メソッドで行う必要があります。
  • すべてのカスタムペイントでは、直ちにsuperメソッドを呼び出して、コンテナのBGと枠線をペイントして以前の図面を確実に消去する必要があります。
  • 一般的なJava命名法(命名規則 - EachWordUpperCaseClass,、firstWordLowerCaseAttributeなどでない限り、UPPER_CASE_CONSTANT以外)を習得し、一貫して使用してください。
  • JFrame a = new JFrame(); a.setTitle("Rectangle RED");
    JFrame a = new JFrame("Rectangle RED");
に短縮することができ
関連する問題