Java AWT窗口没有';不要重新油漆
我从window派生了一个类,但每当我调用setValue()(它调用repaint)时,它都不会被重新绘制(该方法被调用,但屏幕上没有任何变化)。将绘制第一个值,默认值为0。 下面是课程: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
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),挥杆就像一个魔咒。非常感谢。看看有没有问题,我再也懒得去解决了。