寫在之前
以下是《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);
}
}
- 運(yùn)行
javac SimpleApplet.java
進(jìn)行編譯 - 運(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)一些方法,接受并處理這些通知。
使用模型:
- 在偵聽器中國實(shí)現(xiàn)相應(yīng)接口,使其接收所需類型的事件
- 實(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代碼。