一 圖形文件的讀入
在Java中,可以直接載入並輸出圖形文件格式, 一共有兩種,分別是Gif和Jpeg文件(不要懷疑,真的不支持BMP文件格式)。只要你能夠給定圖形文件的位置和文件名,就可以通過getImage這個方法載入所要的圖形。
在這裡所說的位置,指的並不是在磁盤上的哪一個目錄,而是圖形文件所在的URL位置。換句話說,你不但可以在Java程序中使用存放在自己硬盤上的圖形文件,還可以通過URL指定的方式,直接度曲網絡資源上的圖形文件,而且使用的方式非常簡單,完全沒有一般在編寫網絡程序上常遇到的困難和負擔。
讓我們來看一看getImage的使用方式,getImage這個方法主要出現在兩個類裡,第一個是java.applet.Applet中,另外一個是java.awt.Tookit。在編寫Java應用程序時,只能使用Java.awt.Tookit中的方法,而編寫Java小應用程序時,良種都可以使用。getImage方法的格式是:
1)在Java.applet.Applet類內
Image getImage(URL,url)
Image getImage(URL url,String name)
2)在Java.awt.Tookit類內
Image getImage(String filename)
IMage getImage(URL url)
舉個例子來說,它的調用方法為:
URL url1,url2;
url1=new URL("file:/d:/image/pic1.gif");
url2=new URL("http://abc.cde.edu.cn/Applet/pic2.jpg");
Image image1=getImage(url1):
Image image2=getImage(url2):
Image image3=getImage(getCodeBase(),"p1.jpg");
其中的getCodeBase()方法是返回相對路徑,也就是說,你的網頁文件現在在哪兒,那麼它的返回值就是你的網頁文件的這個位置。
把圖形文件讀入內存中後,下一步,就是要將它顯示出來了,怎麼顯示出來,用g.drawImage(image1,x,y,this)方法就可以了,x,y是圖形顯示的坐標點。如果要改變大小,可以用如下的顯示方式。
g.drawImage(image1,x,y,width,height,this);
g.drawImage(image1,x,y,width,height,Color.blue,this);
後面的一種方法是將圖片的背景色設置成為blue顏色,改變width和height就可以達到改變圖片的顯示大小與比例,可以形成放大與縮小,或者是拉長拉扁等效果了。
讓我們看一個具體的例子吧!
這是一幅圖片顯示兩次,請查看它的源代碼
二 聲音文件的讀入
聲音文件和Java讀入圖形格式的原理是一樣的,但是,現在Java好象還只支持AU格式的聲音文件格式,這種格式並不多見,所以可能需要大家將別的文件格式轉化成為這種格式了。它的調入方法和播放方法如下:
import Java.applet.AudioClip;
AudioClip bgsound=getAudioClip(URL url):
bgsound.play(); //播放一次
bgsound.loop(); //循環播放
bgsound.stop(); //停止播放
//你也可以直接一次性地讀入並播放
play(getCodeBase(),"audio/welcome.au");
……
它的URL的使用方法同前面的讀入圖象時用的方法是一個原理,這兒就不多說了!
三 JavaApple中字體屬性的設置
JavaApple中字體屬性的設置
從前地面的學習中,我們已經知道,Graphics類的方法drawString()可以在屏幕的指定位置顯示一個字符串,而Java中還有一個類Font,使用它可以獲得更加豐富多采和逼真精確的字體效果。
一個Font類的對象表示了一種字體的顯示效果,包括字體類型、字型、和字號。下面的語句用語創建一個Font類的對象:
Font Myfont=new Font("楷體",Font.BOLD,14);
Myfont是自己剛剛設置好的一個字體屬性,大小為14磅,類型為楷體,是加粗型,另外的兩種是Font.PLAIN, 正常型,Font.ITALIC,斜體。
選擇好字體後,就是設置字體了,設置字體用一個方法為:g.setFont(Myfont)就可以了,以後在沒有設置新的字體之前,都將會用這個已經設置好了的字體顯示字體。給大家舉下面一個例子,如下:
這個程序主要是講述如何在Applet中調用新的字體,新的字體風格,字體大小,新的顏色以及如何從網頁的Html語法代碼中獲得相應的屬性設置。
源代碼如下:
import Java.awt.*;
import Java.applet.*;
public class Applet1 extends Applet
{
private String vname;
private int vnumber;
Color oldColor;
Font oldFont;
String[] paraname={"red","green","blue"}; //Html提供的三個參數的名稱
int[] rgb=new int[3]; //保存三色比例的數組
public void init()
{
vname=getParameter("vname"); //從網頁中獲得人名
vnumber=Integer.parseInt(getParameter("vnumber"));//從網頁中獲得號碼
for(int i=0;i<paraname.length;i++) //取得Html文件中指定的三色比例
rgb[i]=Integer.parseInt (getParameter(paraname[i]));//並轉化成整數付給數組
}
public void paint(Graphics g)
{
String fontname[]={"宋體","黑體","錄書"};//字體名字
String styname[]={"PLAIN","BOLD","ITALIC"};//字體風格名字
int fontstyle[]={Font.PLAIN ,Font.BOLD ,Font.ITALIC };//字體風格屬性
oldFont=g.getFont (); //獲得原來的缺省字體
for (int i=0;i<3;i++)
{
for (int j=0;j<3;j++)
{ //設置不同大小不同風格、類型的字體
g.setFont (new Font(fontname[i],fontstyle[j],12));
g.drawString ("請注意我的變化 "+fontname[i]+" "+
styname[j],20,20*(i*3+j+1));
}
} //循環打印出各個風格與類型的字符串
g.setFont (oldFont); //恢復原來的缺省字體
oldColor=g.getColor (); //保存原有的缺省顏色
g.drawString ("你好"+vname+", 你的號碼是:"+vnumber,40,210);
g.setColor (new Color (rgb[0],rgb[1],rgb[2])); //設置新的顏色
g.drawString ("用的顏色是:"+g.getColor ().toString(),20,230);
//用新建顏色顯示該顏色的三色分量
g.setColor (oldColor); //恢復原來的顏色
g.drawString ("以前的顏色是:"+g.getColor ().toString (),20,250);
//用原來的顏色顯示原來顏色的三色分量
}
}
編譯好這個文件後,在網頁中要做相應的設置,如下:
<applet code=Applet1.class width=320
height=270 VIEWASTEXT>
< param name=vname value="張三">
< <param name=vnumber value=4>
< param name=red value=255>
< param name=green value=0>
< param name=blue value=0>
</applet>
上面的程序中涉及到了Color類, Color類的使用方法為:
Color Mycolor=new Color(int red,int Green,int blue);
例如:
Color Mycolor=new Color(0,0,255);
這就是一個創建藍色的例子了。
使用Java Applet訪問數據庫
學習任何的程序語言,當然都得與數據庫,Java剛剛誕生的時候,對數據庫的支持並不是很好,經過這幾年的發展,它對數據庫的支持也已經完全達到了成熟的境地。由於這裡主要是介紹Java Applet小程序, 因此,不可能用大的篇幅去給大家介紹數據庫的知識了,怎麼樣去建立與設計數據庫,還是請大家自己找點書看看吧!這兒,對不住了。
我們這兒以Microsoft Access數據庫為例子來說明怎麼實現一個數據庫的打開與讀取的知識。
第一步:
使用Microsoft Access創建一個數據庫,也就是我的這個例子要用到的,內容就隨便了。
第二步:也就是編程序了。
1)定義變量,變量的定義如下:
TextArea theVisits=new TextArea (6,80);
//顯示數據庫的內容
TextField theStatus=new TextFIEld ("",80);
//顯示打開數據庫的信息。相當於程序的狀態欄
Connection theConnection; //數據庫的連接方法
Statement theStatement; //代表一個發送到數據庫來執行的數據庫命令
ResultSet theResult; //讀取的數據結果,也就是數據庫返回的結果
ResultSetMetaData theMetaData;
//包含了有關數據庫命令執行後 返回結果的有用信息。
String theDataSource; //包含了被訪問數據庫或者數據源的名稱,用URL形式表示 .
String theUser; //數據庫的用戶名
String thePassWord; //數據庫的密碼
2)實現界面,可以用開始時給大家介紹的方法來實現,界面的實現相對來說,
比較的簡單了,如下:
public void init()
{
add(theVisits);
add(theStatus);
theVisits.setEditable (false); //設置文本區域不可以被用戶寫入
theStatus.setEditable (false); //設置文本區域不可以被用戶寫入
openConnection(); //打開數據庫的連接
execSqlCommand("select * from MyTable"); //從數據庫中讀取內容
closeConnection(); //關閉已經打開的數據庫
}
3)打開某個數據庫的連接
public void openConnection()
{
theDataSource="jdbc:odbc:MyAccess";
theUser="";
thePassWord="";
try
{
Class.forName("Sun.jdbc.odbc.JdbcOdbcDriver");
theConnection=DriverManager.getConnection(theDataSource,theUser,thePassWord);
theStatus.setText("Status:OK");
}
catch (Exception e)
{
handleException(e);
}
}
包含數據源名稱的字符串格式為一個特殊的語句:
jdbc:<subpotocol>:<subname>
協議 名jdbc必須提供,子協議和子名稱根據使用數據源類型而變化。
JDBC DriverManager使用子協議來選擇書記源響應的驅動程序。子協議
的通常值為“odbc”和“Oracle“,子名稱包含了該驅動程序使用的附加
信息。通常情況,該子名稱是某個網絡名稱,例如,用於其它Web服務:
jdba:<subpotocol>://<host.domin><port>/<databasename>
驅動程序的說明應該指定子協議和子名稱的正確形式。使用ODBC時,主機
和端口信息沒有必要提供,因為數據源總是配置在本地主機上。用於ODBC數據源的形式是
jdbc:odbc:<data source name>
為了打開數據庫連接,用戶必須使用具體的驅動程序另外,驅動程序應該指
定如何這樣做。如果正在使用JDBC-ODBC橋程序,那麼可以通過使用名為Class類
的forName()方法來使用具體的JDBC-ODBC橋驅動程序。
class.forName("sun.jdbc.JdbcOdbcDriver");
然後,擁護可以告訴rManager打開數據源的連接,使用下列方法:
theConnection=DriverManager.getConnection(theDataSource,theUser,thePassWord);
getConnection()方法返回一個Connection對象,用戶應該保存這個對象,
因為它是訪問數據源的方法。這裡,該對象保存到名為theConnection的字段中。
如果在打開連接過程中出現錯誤,則SQLexception作廢,通過在try-catch
塊內打開連接的語句,擁護可以處理這種異常。通過使用後面要講的handleException(),
在TextFIEld內顯示一個簡短的相應信息。
4)執行SQL命令
public void execSQLCommand(String command)
{
try{
theStatement=theConnection.createStatement();
theResult=theStatement.executeQuery (command);
theMetaData=theResult.getMetaData ();
int columnCount=theMetaData.getColumnCount ();
theVisits.setText("");
while(theResult.next ())
{
for(int i =1;i<=columnCount;i++)
{
String colValue=theResult.getString(i);
if(colValue==null)colValue="";
theVisits.append (colValue+";");
}
theVisits.append ("\n");
}
}catch(Exception e)
{
handleException(e);
}
}
為了執行該命令,程序使用Connection對象的createStatement()方法創建
一個可以有查詢的Statement。然後,它激活Statement對象的executiveQuery()
方法,用來傳遞包含SQL查詢語句的字符串。從init()中傳送過來的參數——
Slect * from MyTable是一個簡單的數據庫查詢語言,如果你還不知道什麼意思,
那麼請你還是查看一本有關數據庫的書吧,這些內容很多,不是我這兒一下子能說
清楚的了。它的意思簡單的說,就是查找表——MyTable中的所有(*)信息。它會
返回數據庫中的所有內容,並把它作為ResultSet訪問的結果。接著該程序激活ResultSet
對象的getMetaData()方法。這時,返回一個ResultSetMetaData值,該值存儲在
一個稱為theMetaData的變量中。使用ResultSetMetaData對象,可以獲得很多有用的
數據;這裡該程序使用getColumnCount()方法獲得結果表中列的數量。最後,該程序反
復使用該結果表,激活theResult的next()方法獲得結果表中的每一條記錄,只到該方法
使用完全部記錄返回flase為止。
5)關閉數據庫連接
public void closeConnection()
{
try{
theConnection.close ();
}
catch(Exception e)
{
handleException(e);
}
}
當用戶訪問完某個數據庫時,應該關閉數據庫連接,釋放與連接有關的資源。用戶創建
的任何打開的ResultSet或者Statement對象將 自動關閉。另外,在關閉連接時可能發
生一個SQLException,也放到後面處理。
6)處理異常和錯誤
public void handleException(Exception e)
{
theStatus.setText("Error:"+e.getMessage ());
e.printStackTrace ();
if(e instanceof SQLException)
{
while((e=((SQLException)e).getNextException ())!=null)
{
System.out.println(e);
}
}
}
handleException()方法用來處理以上的錯誤和異常。該方法設置狀態TextFIEld包含與
異常有關的錯誤消息,使用getMessage()方法獲得該消息。它還可以在System.out打印
堆棧軌跡。
三 安裝ODBC數據源
為了運行這個應用程序,用戶必須 首先創建一個與MyTable數據庫相對應的 ODBC數據源。
為了通過ODBC使用Access,用戶必須安裝Access Odbc驅動程序。如果用戶沒有安裝該驅動
程序,那麼還是先安裝吧,什麼,不會,不會也不行了,找一本書好好看看吧,這是肯定要
看的。我這兒簡單的給你說一下吧:
1.從控制面板中選擇ODBC-32,雙擊(要是沒有這個圖標,那我真的沒有辦法了,它在安裝
數據庫的時候,應該會安裝上的,否則就只能找一張數據庫系統的安裝盤,找到ODBC驅動程
序進行安裝)。
2.單擊添加,選擇Microsoft Access Driver。(如果這個圖標也沒有,那麼你的機器是嚴
重缺乏營養,趕緊裝數據庫必須的軟件,先裝Access,這兒要用)
3.輸入你要使用的數據源的名稱(如果沒有,那就得先創建,我這兒就不說Access的使用方
法了)。描述就隨便你了。
4.單擊選擇按鈕選擇你已經創建好了的Access數據庫的文件。
5.點確定就可以了。如果你想為你數據庫保密的話,可以加上用戶名和密碼。(在高級選項裡面)。
要說明一點的是,如果你用VJ++編輯的此程序,要是運行不了,那就是數據庫的連接沒有設
置好,怎麼將數據庫設計好,以後再說吧。另外,VJ++有它自己的數據庫驅動程序。很適合與
VJ++一起使用,可惜介紹這方面的書好象不是很多。