我是一名学徒软件开发人员。我目前正在学习Java,我想创建一个基本的滴答时钟。我通过修补和搜索来完成了很多代码,但是,我不明白我将如何替换秒针并绘制一个新的代码。我试图在这里做到:
t = new Timer(1000, timer);
t.setRepeats(true);
t.start();
}
ActionListener timer = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
x= 253;
y = 150;
x=x+12;
y=y+12;
System.out.println(x);
System.out.println(y);
ga.drawLine(250, 275, x, y);
repaint();
}
我通过使用Swing计时器和paintComponent方法完成了这项工作。但是,图形对象' ga'这里没有从绘图组件中读取相同的内容,并且不会在主时钟上绘制/重叠。这应该是简单的,因为任何大的东西都会让我感到困惑,因为我已经看到很多在线时钟都有很长的代码。我只想让手勾手。
对此的任何帮助将不胜感激!
提前致谢
答案 0 :(得分:3)
这是解决问题的错误方法。您需要让Swing
组件担心何时重绘自己。正确的解决方案是覆盖您正在绘制的组件中的paintComponent(Graphics)
,并让它在每个步骤上绘制完整的时钟。然后,在您的计时器中,您应该更新对象中的一个变量,该变量显示将要绘制秒针的位置,并在顶层框架上调用repaint()
。
因此,您的计时器代码将更改为以下内容:
@Override
public void actionPerformed(ActionEvent e) {
int x = codeToGetXPosition();
int y = codeToGetYPosition();
myPanel.x = x;
myPanel.y = y;
repaint();
}
您的paintComponent
方法看起来像这样:
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
//Code to draw the rest of your clock
g.drawLine(250, 275, x, y);
}
只要需要重新绘制组件(例如,组件调整大小时),就会调用该方法,因此应确保始终在正确的位置绘制完整的时钟。