Java actionPerformed和ActionListener的问题
我已经开始使用Java编程,但Swing有一个问题。我想在单击我的按钮后重复椭圆形动画Java actionPerformed和ActionListener的问题,java,swing,Java,Swing,我已经开始使用Java编程,但Swing有一个问题。我想在单击我的按钮后重复椭圆形动画przycisk。这就是为什么我创建RamkaAnimacjaKola mojeGUI=newramkaanimacjakola()在我的操作中执行。那么我应该改变什么呢 我调用Thread.sleap,因为这是我书中的一个例子。当我尝试只运行一次代码时,它就起作用了。这意味着没有操作侦听器和按钮przycisk源代码如下: package Kurs; import java.awt.BorderLayout
przycisk
。这就是为什么我创建RamkaAnimacjaKola mojeGUI=newramkaanimacjakola()代码>在我的操作中执行
。那么我应该改变什么呢
我调用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);
}
}
}
你能解释一下为什么它不工作吗?你不应该在事件调度线程中做任何会阻止它的事情
除其他事项外,EDT负责处理重绘请求。任何阻止EDT处理这些事件的操作(如Thread.sleep
)都会使其显示为应用程序已冻结。在这方面有许多优秀的例子
看一看和一些例子
您可能还想通读一下请阅读关于如何使用swing编程的基本教程,然后是关于图形的教程(再多了解一点OOP也不错)。我认为,只要你没有掌握基本知识,那么纠正代码就没有多大意义。你昨天问了同样的问题,已经结束了。一些建议,但你显然没有考虑它们。我喜欢你命名类和变量的想法,但如果名称更有意义,遵循代码会很有帮助。请下次将代码翻译成英语。这段代码对大多数人来说都是不可读的。谢谢你的帮助,但是我能请你解释一下吗?或者你能对我的代码进行更正吗?我将非常感激,因为我是一个真正的初学者程序员,我花了很多时间试图找到这种行为的解释
package Kurs;
public class UruchomGUI {
/**
* @param args
*/
public static void main(String[] args) {
RamkaAnimacjaKola mojeGUI = new RamkaAnimacjaKola();
mojeGUI.zacznijAnimacje();
}
}