gpt4 book ai didi

java - 在 RainBow 的每个弧线之间添加 1 秒的延迟

转载 作者:行者123 更新时间:2023-12-01 20:52:18 25 4
gpt4 key购买 nike

嗨,我在这里使用 Thread.delay() 在彩虹的每个弧的形成之间添加延迟,使其看起来像动画。当我使用 Thread.delay() 时,它会延迟整个过程。有没有其他方法或者我做错了。请帮我解决问题

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


public class RainBow2{
static int x,y,z;
static RainBowPanel rainBow = new RainBowPanel();
static StdRainBow stdRainBow = new StdRainBow();
static JTextField xCo = new JTextField(4);
static JTextField yCo = new JTextField(4);
static JTextField angle = new JTextField(4);
static JFrame frame;

public static void main(String[] args){
Color color = new Color(135,206,250);
frame = new JFrame("Rainbow");
JPanel panel = new JPanel();
JButton draw = new JButton("Draw RainBow");
draw.addActionListener(new ListenButton());
JLabel lab1 = new JLabel("X-Coordinate");
JLabel spaceLab = new JLabel(" ");
JLabel lab2 = new JLabel("Y-Coordinate");
JLabel angleLab = new JLabel("Initial Angle");
JButton chButton = new JButton("Change Color");
chButton.addActionListener(new ListenButton());
panel.setBackground(color);
panel.add(angleLab);
panel.add(angle);
panel.add(lab1);
panel.add(xCo);
panel.add(spaceLab);
panel.add(lab2);
panel.add(yCo);
panel.add(draw);
panel.add(spaceLab);
panel.add(chButton);
frame.getContentPane().add(BorderLayout.SOUTH,panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1366,740);
frame.setVisible(true);
rainBow.addMouseListener(new RainBowList());
frame.getContentPane().add(rainBow);


}

static class RainBowList extends MouseAdapter implements MouseMotionListener{
public void mouseClicked(MouseEvent e){
x = e.getX();
y = e.getY();
rainBow.drawing(x, y, 0);

}

}

static class ListenButton implements ActionListener{
public void actionPerformed(ActionEvent a){
if(a.getActionCommand().equals("Draw RainBow")){
x = Integer.parseInt(xCo.getText());
y = Integer.parseInt(yCo.getText());
z = Integer.parseInt(angle.getText());
rainBow.drawing(x, y,z);
}
if(a.getActionCommand().equals("Change Color")){
rainBow.drawing(x, y,z);
}
}

}




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

public class RainBowPanel extends JPanel{

int x,y,z;

public void drawing(int xx, int yy, int zz){
Color color = new Color(135,206,250);
setBackground(color);
z = zz;
x = xx;
y = yy;
repaint();
}


public void paintComponent(Graphics g){
super.paintComponent(g);
int length = 300;
int width = 300;
x = x-length/2;
y = y-width/2;

for(int i =0 ; i< 7;i++){
Color color = new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255));
g.setColor(color);
g.fillArc(x,y,length ,width ,z,180 );

x=x+15;
y=y+15;
length = (length-30);
width = (width-30);
try{
Thread.sleep(200);
}catch(Exception e){

}
}

}

}





}

最佳答案

When I am using Thread.delay() it delays the whole process.

绘画方法仅用于绘画。您不应该导致线程延迟。这将防止 GUI 重新绘制自身,直到整个循环执行完毕。

您可以使用 Swing Timer 来安排重新绘制。

您应该绘制到 BufferedImage,而不是在 PaintComponent() 中进行绘制。然后您可以在 JLabel 上的 ImageIcon 中显示图像。

因此,当生成计时器事件时,您将绘制彩虹的颜色。绘制完所有 7 种颜色后,停止计时器。

阅读 Swing 教程中关于 How to Use Swing Timers 的部分了解更多信息和示例。

关于java - 在 RainBow 的每个弧线之间添加 1 秒的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43033690/

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