Applet與事件

寫在之前

以下是《Java8編程入門官方教程》中的一些知識,如有錯(cuò)誤,煩請指正。涉及的程序如需下載請移步http://down1.tupwk.com.cn/qhwkdownpage/978-7-302-38738-1.zip

applet的基礎(chǔ)知識

applets是設(shè)計(jì)用于在Internet間傳輸,在瀏覽器上運(yùn)行的小程序。有兩種基本類型:基于抽象窗口工具包的applet和基于Swing的applet。兩者都支持創(chuàng)建用戶圖形界面。

import java.awt.*; 
import java.applet.*; 
/* 
<applet code="SimpleApplet" width=200 height=60> 
</applet> 
*/ 
 
public class SimpleApplet extends Applet { 
  public void paint(Graphics g) { 
    g.drawString("Java makes applets easy.", 20, 20); 
  } 
}
  1. 運(yùn)行javac SimpleApplet.java進(jìn)行編譯
  2. 運(yùn)行appletviewer SimpleApplet.java命令,大家注意后面的參數(shù)是.java文件而不是類名。

applet架構(gòu)

applet是基于GUI的程序。applet由事件驅(qū)動(dòng)。由用戶發(fā)起與applet的交互。

applet框架

// An AWT-based Applet skeleton. 
import java.awt.*; 
import java.applet.*; 
/* 
<applet code="AppletSkel" width=300 height=100> 
</applet> 
*/ 
 
public class AppletSkel extends Applet { 
  // Called first. 
  public void init() { 
    // initialization 
  } 
 
  /* Called second, after init().  Also called whenever 
     the applet is restarted. */ 
  public void start() { 
    // start or resume execution 
  } 
 
  // Called when the applet is stopped. 
  public void stop() { 
    // suspends execution 
  } 
 
  /* Called when applet is terminated.  This is the last 
     method executed. */ 
  public void destroy() { 
    // perform shutdown activities 
  } 
 
  // Called when an AWT-based applet's window must be restored. 
  public void paint(Graphics g) { 
    // redisplay contents of window 
  } 
}

雖然框架沒有執(zhí)行實(shí)際的操作,但是仍然可以編譯執(zhí)行。

applet的初始化和終止

開始運(yùn)行:init--start--paint

終止:stop--destroy\

請求重繪

通過repaint()和update方法實(shí)現(xiàn)。

/*  
   Try This 14-1 
 
   A simple banner applet. 
 
   This applet creates a thread that scrolls 
   the message contained in msg right to left 
   across the applet's window. 
*/ 
import java.awt.*; 
import java.applet.*; 
/* 
<applet code="Banner" width=300 height=50> 
</applet> 
*/ 
 
public class Banner extends Applet implements Runnable { 
  String msg = " Java Rules the Web "; 
  Thread t; 
  boolean stopFlag; 
 
  // Initialize t to null.  
  public void init() { 
    t = null; 
  } 
 
  // Start thread 
  public void start() { 
    t = new Thread(this); 
    stopFlag = false; 
    t.start(); 
  } 
 
  // Entry point for the thread that runs the banner. 
  public void run() { 
 
    // Display banner  
    for( ; ; ) { 
      try { 
        repaint(); 
        Thread.sleep(250); 
        if(stopFlag)
          break; 
      } catch(InterruptedException exc) {} 
    } 
  } 
 
  // Pause the banner. 
  public void stop() { 
    stopFlag = true; 
    t = null; 
  } 
 
  // Display the banner. 
  public void paint(Graphics g) { 
    char ch; 

    ch = msg.charAt(0); 
    msg = msg.substring(1, msg.length()); 
    msg += ch; 
    g.drawString(msg, 50, 30); 
  } 
}

使用狀態(tài)窗口

void showStatus(String msg)
// Using the Status Window. 
import java.awt.*; 
import java.applet.*; 
/* 
<applet code="StatusWindow" width=300 height=50> 
</applet> 
*/ 
 
public class StatusWindow extends Applet{ 
  // Display msg in applet window. 
  public void paint(Graphics g) { 
    g.drawString("This is in the applet window.", 10, 20); 
    showStatus("This is shown in the status window."); 
  } 
}

向applet傳遞形參

String getParameter(String paramName)
// Pass a parameter to an applet. 
import java.awt.*; 
import java.applet.*; 
 
//html形參
/* 
<applet code="Param" width=300 height=80> 
<param name=author value="Herb Schildt"> 
<param name=purpose value="Demonstrate Parameters"> 
<param name=version value=2> 
</applet> 
*/ 
 
public class Param extends Applet { 
  String author; 
  String purpose; 
  int ver; 
 
  public void start() { 
    String temp; 
 
    author = getParameter("author"); 
    if(author == null) author = "not found"; 
 
    purpose = getParameter("purpose"); 
    if(purpose == null) purpose = "not found"; //檢查形參是否存在
 
    temp = getParameter("version"); 
    try { 
      if(temp != null) 
        ver = Integer.parseInt(temp); 
      else 
        ver = 0; 
    } catch(NumberFormatException exc) { //確保數(shù)值轉(zhuǎn)換成功
        ver = -1; // error code 
    } 
  } 
 
  public void paint(Graphics g) { 
    g.drawString("Purpose: " + purpose, 10, 20); 
    g.drawString("By: " + author, 10, 40); 
    g.drawString("Version: " + ver, 10, 60); 
  } 
}

Applet類

所有的基于AWT的applet都是Applet類的子類。

委派事件模型

概念:一個(gè)源產(chǎn)生一個(gè)事件,然后將它送到一個(gè)或多個(gè)監(jiān)聽器那里。

事件

委派模型中,描述源中狀態(tài)變化的對象。

事件源:產(chǎn)生事件的對象。一個(gè)源必須注冊監(jiān)聽器,以求可以接受關(guān)于特定時(shí)間類型的通知。

public void addTypeListener(TypeListener el)

源必須提供一個(gè)方法,以允許偵聽器取消對某種特定類型事件的注冊。

public void removeTypeListener(TypeListener el)

事件偵聽器:這是在事件發(fā)生時(shí)被告知的那個(gè)對象。需要兩個(gè)條件:必須向一個(gè)或多個(gè)源注冊;必須實(shí)現(xiàn)一些方法,接受并處理這些通知。

使用模型:

  1. 在偵聽器中國實(shí)現(xiàn)相應(yīng)接口,使其接收所需類型的事件
  2. 實(shí)現(xiàn)代碼將偵聽器作為事件通知的接收者來注冊或者取消注冊
// Demonstrate the mouse event handlers. 
import java.awt.*; 
import java.awt.event.*; 
import java.applet.*; 
/* 
  <applet code="MouseEvents" width=300 height=100> 
  </applet> 
*/ 
 
public class MouseEvents extends Applet 
  implements MouseListener, MouseMotionListener { 
 
  String msg = ""; 
  int mouseX = 0, mouseY = 0; // coordinates of mouse 
 
  public void init() { 
     addMouseListener(this); //注冊該類作為鼠標(biāo)事件的監(jiān)聽者
     addMouseMotionListener(this); 
  } 
 
  // Handle mouse clicked. 
  public void mouseClicked(MouseEvent me) { 
    mouseX = 0; 
    mouseY = 10; 
    msg = "Mouse clicked."; 
    repaint(); 
  } 
 
  // Handle mouse entered. 
  public void mouseEntered(MouseEvent me) { 
    mouseX = 0; 
    mouseY = 10; 
    msg = "Mouse entered."; 
    repaint(); 
  } 
 
  // Handle mouse exited. 
  public void mouseExited(MouseEvent me) { 
    mouseX = 0; 
    mouseY = 10; 
    msg = "Mouse exited."; 
    repaint(); 
  } 
 
  // Handle button pressed. 
  public void mousePressed(MouseEvent me) { 
    // save coordinates 
    mouseX = me.getX(); 
    mouseY = me.getY(); 
    msg = "Down"; 
    repaint(); 
  } 
 
  // Handle button released. 
  public void mouseReleased(MouseEvent me) { 
    // save coordinates 
    mouseX = me.getX(); 
    mouseY = me.getY(); 
    msg = "Up"; 
    repaint(); 
  } 
 
  // Handle mouse dragged. 
  public void mouseDragged(MouseEvent me) { 
    // save coordinates 
    mouseX = me.getX(); 
    mouseY = me.getY(); 
    msg = "*"; 
    showStatus("Dragging mouse at " + mouseX + ", " + mouseY); 
    repaint(); 
  } 
 
  // Handle mouse moved. 
  public void mouseMoved(MouseEvent me) { 
    // show status 
    showStatus("Moving mouse at " + me.getX() + ", " + me.getY()); 
  } 
 
  // Display msg in applet window at current X,Y location. 
  public void paint(Graphics g) { 
    g.drawString(msg, mouseX, mouseY); 
  } 
}

其他Java關(guān)鍵字

transient:在存儲(chǔ)對象時(shí),它的值不需要存儲(chǔ)。

volatile:告知編譯器,程序的其他部分可以任意改動(dòng)該變量。

instanceof:如果是指定的類型,或者可以強(qiáng)制轉(zhuǎn)換成指定類型,運(yùn)算符返回ture

assert:程序開發(fā)期間創(chuàng)建斷言。

assert condition;
assert n>0;//如果斷言失敗拋出AssertionError
  
 assert condition: expr;//如果斷言失敗,該值被替換成它的字符串格式,并在斷言失敗時(shí)顯示、

native:申明一個(gè)本機(jī)方法,同時(shí)必須編寫好,并按照步驟來鏈接Java代碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,951評論 19 139
  • Java是一個(gè)支持并發(fā)、基于類和面向?qū)ο蟮挠?jì)算機(jī)編程語言。下面列出了面向?qū)ο筌浖_發(fā)的優(yōu)點(diǎn): 代碼開發(fā)模塊化,更易...
    安安靜靜寫代碼閱讀 1,103評論 0 8
  • Java 面試題 整理自牛客網(wǎng) 什么是Java虛擬機(jī)?為什么Java被稱作是“平臺無關(guān)的編程語言”? Java虛擬...
    GuaKin_Huang閱讀 10,684評論 19 265
  • 面向?qū)ο缶幊蹋∣OP) Java是一個(gè)支持并發(fā)、基于類和面向?qū)ο蟮挠?jì)算機(jī)編程語言。下面列出了面向?qū)ο筌浖_發(fā)的優(yōu)點(diǎn)...
    hutuxiaogui閱讀 953評論 0 2
  • 春天的到來就是萬物復(fù)蘇的時(shí)候,我種在內(nèi)心的那顆小小的種子也開始發(fā)芽了,小樹苗要想茁壯成長必須用心去對待,現(xiàn)在...
    唯一的天空閱讀 64評論 0 0