我从窗口派生了一个类,但每当我调用setValue()(调用repaint)时,它都不会被重绘(调用该方法,但屏幕上没有任何变化)。绘制第一个值,默认为0。 这是班级:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.Window;
@SuppressWarnings("serial")
public class HashtagLikeDisplay extends Window {
protected int count;
HashtagLikeDisplay() throws HeadlessException {
super(null);
this.setAlwaysOnTop(true);
this.setBounds(this.getGraphicsConfiguration().getBounds());
this.setBackground(new Color(0, true));
this.setVisible(true);
}
public void paint(Graphics g) {
super.paint(g); // Doesn't matter if this is here or not
Font font = getFont().deriveFont(48f);
g.setFont(font);
g.setColor(Color.RED);
String message = "Total: " + Integer.toString(count);
g.drawString(message, 10, 58);
}
public void update(Graphics g) {
paint(g);
}
public void setCount(int c) {
this.count = c;
this.revalidate();
this.repaint();
}
}
为什么不能正确重新粉刷?
答案 0 :(得分:2)
来自oracle docs
如果重新实现[update]方法,则应调用super.update(g)以便正确呈现轻量级组件。如果子组件被g中的当前剪切设置完全剪切,则update()将不会转发给该子组件。
另外,就像第一位评论者所说的那样,在paint()中调用super.paint(g)。
如果它仍然不起作用,你应该像使用JComponent而不是窗口一样使用Swing。
public class HashtagLikeDisplay extends JComponent{
...
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// Customize after calling super.paintComponent(g)
Font font = getFont().deriveFont(48f);
g.setFont(font);
g.setColor(Color.RED);
String message = "Total: " + Integer.toString(count);
g.drawString(message, 10, 58);
}