查询java中的applet

时间:2015-07-10 17:58:15

标签: java applet awt

我无法理解为什么paint()中的println()语句正在执行两次。这是代码 -

import java.awt.*;
import java.applet.*;
public class FirstApplet extends Applet
{
    public void init()
    {
        System.out.println(getBackground());
    }
    public void paint(Graphics g)
    {
        setBackground(Color.CYAN);
        setForeground(Color.RED);
        g.drawString("This is my first Applet",250,250);
        System.out.println(getBackground());
    }
}
  

输出:

     

java.awt.Color中[R = 255,G = 255,B = 255]

     

java.awt.Color中[R = 0,G = 255,B = 255]

     

java.awt.Color中[R = 0,G = 255,B = 255]

有人可以解释一下为什么paint()里面的println()执行两次吗?

1 个答案:

答案 0 :(得分:1)

public void paint(Graphics g)
{
    setBackground(Color.CYAN);  // will trigger repaint()!
    setForeground(Color.RED);   // will trigger repaint()!
    g.drawString("This is my first Applet",250,250);
    System.out.println(getBackground());
}

只要工具包认为有必要,就会调用paint(Graphics)方法。有很多事情会导致repaint()(反过来导致调用paint(Graphics))。其中一些是:

  • 窗口在应用程序前移动,或从应用程序前移除。
  • 应用的大小。变化。
  • 背景或前景颜色发生变化或组件状态发生变化。
  • 菜单打开或关闭。
  • ...

显然,只有程序员想要(或期望)它的时间才会发生 。如果“随时随地涂漆”是应用程序的问题,那就是应用程序。要排序的问题,而不是工具包。

查询:

  1. 为什么编写applet代码?如果是教师指定的,请将其转介至Why CS teachers should stop teaching Java applets
  2. 为什么要使用AWT?请参阅this answer,了解使用有利于Swing的组件放弃AWT的许多理由。