gpt4 book ai didi

java - 获取paintComponent中多个绘图的位置

转载 作者:行者123 更新时间:2023-11-30 08:44:41 24 4
gpt4 key购买 nike

我需要获取我在 paintComponent 方法中创建的所有绘图的位置坐标。我该怎么做?

请注意,我使用计时器来执行一些动画,因此坐标会在计时器的每个滴答声中发生变化。

public class TestPane extends JPanel {

private int x = 0;
private int y = 100;
private int radius = 20;
private int xDelta = 2;

public TestPane() {
Timer timer = new Timer(10, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
x += xDelta;
if (x + (radius * 2) > getWidth()) {
x = getWidth() - (radius * 2);
xDelta *= -1;


} else if (x < 0) {
x = 0;
xDelta *= -1;
}
label.setText(x+" "+y);
repaint();
}
});
timer.start();
}

更多代码...

 protected void paintComponent(Graphics g) {
Random random = new Random();
super.paintComponent(g);
g.setColor(Color.ORANGE);
g.fillOval(random.nextInt(500), random.nextInt(500) - radius, radius * 2, radius * 2);

g.setColor(Color.BLUE);
g.fillOval(y, x - radius, radius * 2, radius * 2);
// label.setText(label.getText()+ x+" "+y); ;
g.setColor(Color.RED);
g.fillOval(x, y - radius, radius * 2, radius * 2);
// label.setText(label.getText()+ x+" "+y);
}

最佳答案

你的程序应该维护一个 List<Node>作为类级别属性。 Node 的每个实例应包含呈现程序中每个元素所需的几何图形。

class Node {
private Point p;
private int r;

}

在你的ActionListener , 更新每个 Node 的字段在List .当 repaint()发生,新职位将等待paintComponent()渲染。

@Override
public void paintComponent(Graphics g) {

for (Node n : nodes) {
// draw each node
}

一个完整的例子,命名为GraphPanel , 被引用 here .

关于java - 获取paintComponent中多个绘图的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33691174/

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