【问题标题】:Java Applets - repaintJava 小程序 - 重绘
【发布时间】:2013-04-28 22:10:13
【问题描述】:

我有以下代码:

import java.awt.*;
import java.applet.*;

public class DrawExample extends Applet 
{
    Font bigFont;

     Color redColor;
     Color weirdColor;
     Color bgColor;

     public void init() 
     {
          bigFont = new Font("Arial",Font.BOLD,16);
          redColor = Color.red;
          weirdColor = new Color(60,60,122);
          bgColor = Color.yellow;
      setBackground(bgColor);
     }

     public void stop()
     {
     }

     public void paint(Graphics g) 
     {
      g.setFont(bigFont);
      g.drawString("TESTING",80,20);
      g.setColor(Color.black);
      g.drawRect(100,100,100,100);
      g.fillRect(110,110,80,80);
      g.setColor(weirdColor);
      g.fillArc(120,120,60,60,0,360);
      g.setColor(Color.yellow);
      g.drawLine(140,140,160,160);
      g.setColor(Color.black);
     }
}

我不知道如何“重新绘制”我得到的输出。假设我希望小程序启动,3 秒后我想重新绘制“图片”,以便背景颜色变为红色(或其他颜色)。我怎么做?如何每 3 秒更改一次输出?

【问题讨论】:

  • 顺便说一句 - 在这个时代不要使用 AWT 组件。使用它的人基本上已经忘记了细节。

标签: java applet repaint


【解决方案1】:

答案就在您的标题中,请尝试拨打repaint() method。您可以使用TimerTask 每 3 秒执行一次repaint() 方法/

例子:

boolean colourIsRed = false;
int delay = 1000; //1 second
int period = 3000; //3 seconds

Timer timer = new Timer();

timer.scheduleAtFixedRate(new TimerTask() {
  public void run() {
    if (colourIsRed) {
      setBackground(Color.blue);
      colourIsRed = false;
   }
   else {
      setBackground(Color.red);
      colourIsRed = true;
   }         

   repaint();
  }
}, delay, period);

【讨论】:

  • TimerTask 不遵守 Swing 的单线程要求,计时器的每个滴答声都在事件调度线程之外执行。您应该使用javax.swing.Timer。另外,OP的画质很差
  • OP 正在使用 AWT,单线程要求是否适用于此?
  • 好问题,据我了解,AWT 组件是线程安全的 :(
  • @MadProgrammer 我的理解与你的不同。 AFAIU,Oracle应该一直发出关于 AWT 的警告,就像它对 Swing 发出的警告一样。我认为在他们意识到之前只是“Swing 时间”,并且辅助方法已经在 Swing 中,所以他们不会为试图回溯信息而烦恼。
  • @AndrewThompson 这总是让我感到困惑。我个人只是将所有 UI 方法视为非线程安全的
猜你喜欢
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
相关资源
最近更新 更多