Java AWT窗口没有';不要重新油漆

Java AWT窗口没有';不要重新油漆,java,awt,repaint,Java,Awt,Repaint,我从window派生了一个类,但每当我调用setValue()(它调用repaint)时,它都不会被重新绘制(该方法被调用,但屏幕上没有任何变化)。将绘制第一个值,默认值为0。 下面是课程: import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.HeadlessException; import java.awt.Window; @SuppressWarnings("seri

我从window派生了一个类,但每当我调用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();
    }
}
为什么不能正确地重新绘制?

来自oracle文档

如果重新实现[update]方法,则应调用super.update(g),以便正确呈现轻量级组件。如果子组件被g中的当前剪裁设置完全剪裁,则update()将不会转发给该子组件

另外,正如第一位评论员所说,在paint()中调用super.paint(g)

如果它仍然不起作用,您应该使用Swing,比如JComponent而不是window

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);
  }
}

不确定,但是您可以尝试在绘制方法开始时添加super.paint(g)吗?因此它正在绘制,但没有更新,对吗?是的,我猜。如果我在画图中做了一个println,消息会在需要重新画图时被打印出来。但是屏幕上没有任何变化。你应该扩展
而不是
窗口
。我试过了,结果是一样的。它仍然不起作用。我可以用JComponent实现同样的效果吗(没有边框,完全透明,所以我基本上是在屏幕上绘制的)?@CodezMe你可以使它透明,当你构建组件的颜色时,你必须将alpha值设置为0.0。@CodezMe要删除边框,我相信你可以调用
setBorder(null)
我刚刚调用了setUnderatted(true),挥杆就像一个魔咒。非常感谢。看看有没有问题,我再也懒得去解决了。