首先,不要在paintComponent方法中更新状态,可以在任何时候出于多种原因进行绘制,大多数情况下没有您的交互。绘画应该简单描绘当前的状态。在你的ActionListener中,你应该推进框架并决定应该发生什么(比如重置帧值)
其次,您实际上从未向任何事物添加second,因此永远不会显示它。
第三,您不能覆盖getPreferredSize中的second,因此布局管理员将不知道该组件的大小应该是什么,只是被分配0x0,它与隐形一样好,没有区别
第四,您正在使用null布局。这将使你的生活变得难以置信。 Swing已经围绕布局管理器的使用进行了设计和优化,他们在决定如何最好地处理不同渲染系统/管道中字体度量的差异方面做了重要的工作,我高度建议您花时间学习如何使用它们
第五,paintComponent没有业务public,没有人应该直接调用
实施例
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.Bu