0

我正在学习 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);
  }
}

谢谢,路德

4

4 回答 4

2

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

于 2013-07-29T16:56:15.690 回答
2

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

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

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

所以我建议立即切换到swing。


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

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

Swing 是一项较新的尝试。

于 2013-07-29T16:54:31.510 回答
1

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

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

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

于 2013-07-29T17:05:46.790 回答
0

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

此外,确实没有理由先学习 AWT,然后再学习 Swing。

于 2013-07-29T16:57:53.667 回答