我需要获取我在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);
}
答案 0 :(得分:2)
您的程序应保留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。