我正在嘗試做一個簡單的動畫,其中一個綠色的圓圈在一個名爲panel
的小部件上以模糊的模式對角地移動,這是一個class MyPanel
的實例,它擴展了JPanel
。如何讓綠色圓圈塗抹?
的JFrame
有一個啓動按鈕,按下該按鈕時應該通過調用actionPerformed
方法(在我稱之爲動畫的方法,它調用repaint
方法,同時相繼遞增圓的x和y座標啓動動畫)在本身就是監聽者的主類中。
取而代之的是,當按下按鈕時,圓圈出現在初始座標處,然後經過一段延遲後,另一個圓出現在最終座標處。有人能幫我弄清楚我哪裏出錯了嗎?我是Java的初學者,他在C年前完成了一些基本的編程。
在此先感謝。這裏是我的代碼:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Smear implements ActionListener{
JFrame frame;
MyPanel panel;
JButton button;
Smear animgui1;
int x=70;
int y=70;
public static void main(String[] args) {
Smear animgui=new Smear();
animgui.project();
animgui.set(animgui);
}
public void set(Smear anim) {
animgui1=anim;
}
public void project() {
frame=new JFrame();
panel=new MyPanel();
button=new JButton("Start");
button.addActionListener(this);
frame.getContentPane().add(BorderLayout.NORTH, button);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.setSize(300,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void animate() {
while(x!=200) {
panel.repaint();
x++;
y++;
System.out.println("++++");
try {
Thread.sleep(50);
}
catch(Exception ex) {};
}
}
public void actionPerformed(ActionEvent event) {
animgui1.animate();
}
class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.green);
g.fillOval(x,y,40,40);
}
}
}
但在同一時間,我做了另一個程序SmearGui沒有該按鈕(我刪除有關按鈕和聽衆的代碼),和它的作品其意的方式;該圓圈緩慢移動塗抹模式。代碼爲:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SmearGui{
JFrame frame;
MyPanel panel;
//JButton button;
SmearGui animgui1;
int x=70;
int y=70;
public static void main(String[] args){
SmearGui animgui=new SmearGui();
animgui.project();
animgui.set(animgui);
animgui.animate();
}
public void set(SmearGui anim){
animgui1=anim;
}
public void project(){
frame=new JFrame();
panel=new MyPanel();
//button=new JButton("Start");
//button.addActionListener(this);
//frame.getContentPane().add(BorderLayout.NORTH, button);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.setSize(300,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void animate(){
while(x!=200){
panel.repaint();
x++;
y++;
try{
Thread.sleep(50);
}
catch(Exception ex){};
}
}
/*public void actionPerformed(ActionEvent event){
animgui1.animate();
}*/
class MyPanel extends JPanel{
public void paintComponent(Graphics g){
g.setColor(Color.green);
g.fillOval(x,y,40,40);
}
}
}
上面的代碼將animate方法放置在主體中。
代碼縮進旨在幫助人們在閱讀代碼時瞭解代碼。你是否希望我們讀它? –
'Thread.sleep(50);'不要那樣做。使用Swing ['Timer'](http://download.oracle.com/javase/7/docs/api/javax/swing/Timer.html)。 –
哦..我很抱歉!將從現在開始照顧...並感謝!我剛開始學習java,大概有20-30天,而且我還沒有經歷過所有'〜Swing Timer的東西。 – stonecoldjha