gpt4 book ai didi

java - 以一定的时间间隔更新 DrawString

转载 作者:行者123 更新时间:2023-11-29 09:54:06 24 4
gpt4 key购买 nike

我正在尝试制作一个数字时钟,然后添加到 JPanel,现在当我在 taskPerformer 方法之外调用 DrawString 时它绘制但在内部时,它不绘制字符串!为什么会这样,我将如何实现这个类以使其每秒重绘一次?

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComponent;
import javax.swing.JPanel;
import java.util.Date;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.Timer;

class DrawDate extends JPanel {
public Date ddate;
public Calendar ccalendar = new GregorianCalendar();
Date time;

public DrawDate() {
this.ddate = new Date();
time = this.ccalendar.getTime();
}

public void paint(Graphics g) {
final Graphics2D g2 = (Graphics2D)g;
Font font = new Font("Arial", Font.PLAIN, 50);
g2.setFont(font);
//THIS DRAWS THE STRING
g2.drawString(time.toString() , 100, 100);

ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Calendar ccalendar = new GregorianCalendar();
Date time = ccalendar.getTime();
//THIS DOES NOT DRAW A STRING.
g2.drawString(time.toString() , 200, 100);

}
};
final Timer timer = new Timer(1000, taskPerformer);
timer.start();


}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
super.setBackground(new Color(100,100,100));
paint(g);
}

}

最佳答案

基本上,您遇到了上下文问题。 g2ActionListener 中没有上下文,但是还有其他问题需要先解决...

不要在 paint 方法中创建 ActionListenerTimer,事实上你应该避免覆盖 paint 完全没有。

paint 应该调用 paintComponent,但是因为你忽略了调用 super.paint,所以这不会发生,因此您的 paintComponent 方法将永远不会被调用。但是,您应该避免从 paintComponent 方法中调用 paint

相反,在构造函数中创建 TimerActionListener。当 Timer 计时/触发 actionPerformed 方法时,只需更新您想要绘制的值,然后调用 repaint

paintComponent 方法中,进行实际渲染。

看看Performing Custom PaintingPainting in AWT and Swing了解更多详情

关于java - 以一定的时间间隔更新 DrawString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20931994/

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