【问题标题】:Java AWT : Will applet run without main(), init(), start(), paint()Java AWT:将在没有 main()、init()、start()、paint() 的情况下运行小程序
【发布时间】:2013-07-29 13:41:21
【问题描述】:

我正在学习 AWT,并计划稍后学习 Swing。

我发现了以下小程序代码,据我所知,当以下方法存在时,小程序将开始运行:main()、init()、start()、paint()...

每次单击鼠标时,小程序都会增加它的宽度和长度尺寸:

在这段代码中,以上都不存在,如何调用 ResizeMe 方法?如果不调用 resize 方法,如何调用 addmouselistener? 编辑:顺便说一句,代码有效

// Resizing output to fit the current size of a window.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
/*
  <applet code="ResizeMe" width=200 height=200>
  </applet>
 */

public class ResizeMe extends Applet {
  final int inc = 25;
  int max = 500;
  int min = 200;
  Dimension d;

  public ResizeMe() {
    addMouseListener(new MouseAdapter() {
      public void mouseReleased(MouseEvent me) {
        int w = (d.width + inc) > max?min :(d.width + inc);
        int h = (d.height + inc) > max?min :(d.height + inc);
        setSize(new Dimension(w, h));
      }
    });
  }
  public void paint(Graphics g) {
    d = getSize();

    g.drawLine(0, 0, d.width-1, d.height-1);
    g.drawLine(0, d.height-1, d.width-1, 0);
    g.drawRect(0, 0, d.width-1, d.height-1);
  }
}

谢谢,路德

【问题讨论】:

    标签: java applet awt mouselistener


    【解决方案1】:

    ResizeMe() 是构造函数。因此,它在类创建时被调用,因此,您的鼠标侦听器被添加。 paint() 由 GUI 事件处理线程调用。

    【讨论】:

      【解决方案2】:

      是的,main 用于桌面应用程序。以下方法在小程序生命周期的特定时刻被调用,并允许为该生命周期执行特定的操作。

      • 初始化 - 最初
      • 开始 - HTML 页面(重新)开始时
      • 停止 - 当一个人离开 HTML 页面时
      • destroy - 卸载小程序时

      此外,AWT 的组件部分确实已经过时了;只有java.awt.Color、Font等在使用,Applet、Button等不容易找到。

      所以我建议立即切换到摇摆。


      AWT 让每个纯 Java 组件都与本机代码(操作系统)组件对等。所以一个按钮在 Windows 上是一个真正的 Windows 按钮。所以对于 Windows、Mac 和 Linux 有一个单独的 AWT 实现。

      Swing 自己完成所有工作,并具有多种外观(主题/皮肤)。 System Look-and-Feek 尽可能模拟当前操作系统。 Swings 的优势在于它的高可配置性,例如在 JLabel 上最小化图标和文本之间的距离,或者能够对每个文本组件使用 HTML,只需编写 "&lt;html&gt;&lt;b&gt;Boldly&lt;/b&gt; go, ..."

      Swing 是一项较新的尝试。

      【讨论】:

      • 我认为既然 Swing 是 AWT 的超集,那么先学习 AWT 会让我对 SWING 有更好的理解。你不同意吗?
      • 详细说明了答案。 Swing 是围绕 AWT 构建的,但尤其是不再使用 GUI 组件;组件变得“轻量级”,这意味着拥有许多组件不再意味着大量的资源使用以及在 JVM 代码和本机代码之间切换。
      【解决方案3】:

      Java Applet 类为initstartpaint 方法提供默认实现(请参阅java.applet.Applet)。 ResizeMe 类继承自java.applet.Applet,因此继承了Applet 类的所有方法(有关继承的更多信息,请参阅subclasses)。

      Applet 不需要 main 方法,因为它嵌入在另一个应用程序中。

      ResizeMe() 方法是一个构造函数。实例化 ResizeMe 类时会自动调用它。

      【讨论】:

        【解决方案4】:

        ResizeMe 是对 Applet 的扩展,这意味着它继承了 Applet 拥有的所有方法。查看Docs for Applet 以了解它包含哪些方法,以及它从其父级继承哪些方法。

        另外,真的没有理由先学习 AWT,然后再学习 Swing。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-26
          • 2012-11-13
          • 2018-04-18
          • 2014-10-26
          • 1970-01-01
          • 2016-03-22
          • 2011-11-27
          • 1970-01-01
          相关资源
          最近更新 更多