我已经开始使用Java进行编程了,我有一个Swing问题。我想点击我的按钮przycisk
后重复椭圆动画。这就是我在RamkaAnimacjaKola mojeGUI= new RamkaAnimacjaKola();
中创建ActionPerformed
的原因。那我应该改变什么呢?
我致电Thread.sleap
,因为这是我书中的一个例子。当我尝试只运行一次代码时,它可以工作。这意味着没有动作监听器和按钮przycisk
来源如下:
package Kurs;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class RamkaAnimacjaKola implements ActionListener {
JFrame ramka;
Panel mojPanel;
int x=40;
int y=40;
public void zacznijAnimacje(){
mojPanel = new Panel();
ramka= new JFrame();
JButton przycisk= new JButton("repeat");
ramka.getContentPane().add(BorderLayout.SOUTH, przycisk);
przycisk.addActionListener(this);
ramka.getContentPane().add(BorderLayout.CENTER, mojPanel);
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ramka.setSize(300, 300);
ramka.setVisible(true);
for (int i=0 ; i <40 ;i++){
x++;
ramka.repaint();
try{
Thread.sleep(50);
} catch (Exception ex){ }
}
for (int i=0 ; i <40 ;i++){
y++;
ramka.repaint();
try{
Thread.sleep(50);
} catch (Exception ex){ }
}
for (int i=0 ; i <40 ;i++){
x--;
ramka.repaint();
try{
Thread.sleep(50);
} catch (Exception ex){ }
}
for (int i=0 ; i <40 ;i++){
y--;
ramka.repaint();
try{
Thread.sleep(50);
} catch (Exception ex){ }
}
}
public void actionPerformed(ActionEvent zdarzenie) {
RamkaAnimacjaKola mojeGUI= new RamkaAnimacjaKola();
mojeGUI.zacznijAnimacje();
}
class Panel extends JPanel {
public void paintComponent(Graphics g){
g.setColor(Color.green);
g.fillOval(x, y, 40, 40);
}
}
}
我使用我的测试类启动此代码:
package Kurs;
public class UruchomGUI {
/**
* @param args
*/
public static void main(String[] args) {
RamkaAnimacjaKola mojeGUI = new RamkaAnimacjaKola();
mojeGUI.zacznijAnimacje();
}
}
你能解释一下为什么它不起作用吗?
答案 0 :(得分:2)
您应该在事件调度线程中不执行任何阻止它的操作。
除其他事项外,EDT负责处理重绘请求。你做的任何阻止EDT处理这些事件的事情(如Thread.sleep
)都会使你的应用程序冻结。 SO上有很多优秀的例子。
查看Multiple bouncing balls thread issue和Java Bouncing Ball以及the images are not loading以获取一些示例......
您可能还希望阅读Concurrency in Swing