gpt4 book ai didi

java - 基本动画不执行

转载 作者:行者123 更新时间:2023-11-30 09:40:47 25 4
gpt4 key购买 nike

我正在学习java。这是我的第一部动画。我希望球在按下开始按钮时连续上下移动,并且在按下停止按钮时它应该 STOP 。我编写的代码将球移动了 5 次(向下 3 次,向上 2 次)。但是面板只显示开始和结束位置,不显示中间位置。如何显示中间位置?

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

public class dabble
{
private boolean z = true;
private int x=10;
private int y=10;
private JFrame frame;
private JLabel label;
private mypanel panel;
private JButton b1;
private JButton b2;

public static void main (String[] args)
{
dabble dab = new dabble();
dab.start();
}

void start()
{
frame = new JFrame();
label = new JLabel();
panel = new mypanel();
b1= new JButton("Start");
b2= new JButton("Stop");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

b1.addActionListener(new al1());
b2.addActionListener(new al2());

frame.getContentPane().add(BorderLayout.NORTH,b1);
frame.getContentPane().add(BorderLayout.SOUTH,b2);
frame.getContentPane().add(BorderLayout.CENTER,panel);
frame.getContentPane().add(BorderLayout.EAST,label);
frame.setSize(600,600);
frame.setVisible(true);
}

void go()
{
for(int i=0;i<5;i++)
{
if(z==false)
break;
//label.setText("Hi");
y=510-y;
panel.repaint();
try{
Thread.sleep(500);
//label.setText("sleep");
}catch(Exception Ex)
{
//label.setText("exp");
}
}
}

class al1 implements ActionListener{
public void actionPerformed(ActionEvent event){
go();
}
}

class al2 implements ActionListener{
public void actionPerformed(ActionEvent event){
z=false;
}
}

class mypanel extends JPanel
{
public void paintComponent ( Graphics g)
{
g.setColor(Color.white);
g.fillRect(0,0,this.getWidth(),this.getHeight());
int red = (int) (Math.random()*255);
int green = (int) (Math.random()*255);
int blue = (int) (Math.random()*255);
Color c1 = new Color(red,green,blue);
g.setColor(c1);
g.fillOval(x,y,20,20);
}
}
}

最佳答案

调用 repaint() 实际上并没有绘制面板 - 它只是将其标记为稍后绘制。绘画总是发生在事件分派(dispatch)线程上,事件监听器通知也是如此。

由于 go() 是在事件调度线程上调用的(通过按钮 Action 监听器),因此在 go() 运行时无法重新绘制面板。您只需将 go() 完成后立即发生的单个重绘排队。

您可能想要做的是使用每 500 毫秒触发一次的 javax.swing.Timer,并让它的 Action 是将球移动一步,然后调用 repaint ()

关于java - 基本动画不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9277298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com