【发布时间】:2017-10-08 20:17:17
【问题描述】:
我觉得我在某处看到了类似的东西:
这是我制作public static String iron = IronCount + " iron";的地方。
我觉得我看到的是,如果我的public int IronCount 改变了,弦铁会改变,但它不会改变,至少在 IronCount 在 Timer 中改变时不会改变。
我的完整代码在这里(没有所有g.fillRect()s):
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
public class GeneratorAndGraphics extends JComponent {
private static final long serialVersionUID = 1L;
public int IronCount = 0, GoldCount = 0, DiamondCount = 0;
public String iron = IronCount + " iron"; //$NON-NLS-1$
public void paint(Graphics g) {
// vertical lines
Graphics2D g2d = (Graphics2D) g;
// iron generator
g.setColor(Color.BLACK);
g.drawRect(20, 20, 40, 40);
g.drawLine(20, 30, 60, 30);
g.setFont(new Font("Arial", Font.PLAIN, 9)); //$NON-NLS-1$
g.drawString("Iron Gen", 22, 30); //$NON-NLS-1$
new java.util.Timer().schedule(
new java.util.TimerTask() {
@Override
public void run() {
IronCount++;
iron = IronCount + " iron"; // doesn't do anything
System.out.println(iron); // doens't print
}
},
500
);
g.drawString(iron, 25, 45);
}
}
我认为只要 IronCount 改变,铁就会改变,但它并不像 g.drawString(iron, 25, 45); 总是在我的 JFrame 上显示:0 iron。
也许这是 Timer 的错误,我希望有一个更好的替代方案 - 例如减慢 for 循环的重复速度。
【问题讨论】:
-
您可以在代码中包含minimal reproducible example 吗?您可能不想覆盖
paint,而且您几乎肯定不想在每次调用paint 时都创建一个新的计时器任务。