gpt4 book ai didi

java - 如何使 JButton 沿着绘制的线条移动

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:56:50 25 4
gpt4 key购买 nike

image

我有 Jbutton(由信封表示)和信封将沿用的行的 ArrayList。谁能帮我?任何想法或教程将不胜感激。

最佳答案

我假设您的目标是沿线制作包络动画,以提供正在传输的数据的动画。

对于每一行,您首先需要找到直线方程。线性方程的形式为 y = a * x + b。如果您提到的 List 中已经有它,那很好。另一方面,如果您有两个点(开始位置和结束位置),请使用带有上述等式的点来为每一行找到 ab

在你得到你的线的方程式之后,你可以使用一个动画(可能使用 SwingWorkerSwingTimer)来增加 x 定期计算包络坐标,然后使用直线方程计算新的 y 坐标。

希望对你有帮助

更新:添加了使用 SwingTimer 进行演示的移动盒子的代码片段

package keymovement;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.UIManager;

public class TestMovingObject {

static class Envelope {
double x;
double y;

void setPosition(double x, double y) {
this.x = x;
this.y = y;
}
}

static class DrawArea extends JPanel {

Envelope envelope = new Envelope();

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
int x = (int) Math.round(envelope.x);
int y = (int) Math.round(envelope.y);
g.drawRect(x, y, 20, 20);
}

public Envelope getEnvelope() {
return envelope;
}
}

/**
* @param args
*/
public static void main(String[] args) {

SwingUtilities.invokeLater( new Runnable() {

@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
throw new RuntimeException(e);
}

JFrame window = new JFrame("Moving box");
window.setPreferredSize(new Dimension(500, 400));
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final DrawArea mainArea = new DrawArea();
window.add(mainArea);
window.pack();

window.setLocationRelativeTo(null);
window.setVisible(true);

int delay = 20; // execute every 20 milliseconds i.e. 50 times per second

Timer timer = new Timer(delay, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Envelope envelope = mainArea.getEnvelope();
double x = envelope.x + 1; // use smaller increments depending on the desired speed
double y = 0.5 * x + 2; // moving along the line y = 0.5 * x + 2
envelope.setPosition(x, y);
mainArea.repaint();
}
});
timer.setRepeats(true);
timer.start();

}
});
}

}

关于java - 如何使 JButton 沿着绘制的线条移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18159439/

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