2016-03-23 79 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應該@OverridegetPreferredSize()方法爲畫布返回一個明智的大小。然後,我們可以免除a.setSize(500,500);,而不是a.add(X); a.pack();,以獲得幀的精確大小以顯示渲染。
  • Timer應該在paint方法以外的其他地方啓動!我會去構造函數。
  • 任何JComponent中的自定義繪畫應該在paintComponent(Graphics)方法中完成。
  • 在所有的自定義繪畫中,我們都應該立即調用super方法來確保先前的繪畫通過繪製容器的BG和邊框來刪除。
  • 請學習常用的Java命名規則(命名慣例 - 例如EachWordUpperCaseClass,firstWordLowerCaseMethod(),firstWordLowerCaseAttribute,除非它是UPPER_CASE_CONSTANT)並且一致地使用它。
  • JFrame a = new JFrame(); a.setTitle("Rectangle RED");可以縮短爲
    JFrame a = new JFrame("Rectangle RED");