首頁  >  文章  >  Java  >  菜鳥初學Java的備忘錄(十)

菜鳥初學Java的備忘錄(十)

黄舟
黄舟原創
2016-12-20 13:56:311121瀏覽

回顧昨天所學習的基於連接池的Socket,其原理中的要點如下:伺服器開放有限個PooledConnectionHandler線程用來處理連接;客戶的連接請求均加入到Pool連接池中(實際是linklist()對象) ;PooledConnectionHandler一旦發現連接池中有連接請求,就立即著手處理;大家都使用同一個Pool(所以它是靜態變量)

目前為止,有關java程序設計的一些基本內容都已經學習的差不多了.現在是學以致用的時候了.學習任何語言,要想真正的談得上入門,都應該以一個實際的編程經驗為標誌的,我想.

以前用C++編過一個俄羅斯方塊,覺得這個遊戲的程式設計挺能體現面向對象的思想的.Java和C++有很多共同點,依葫蘆畫瓢誰都會,那麼就重新實現一遍吧,反正也忘得差不多了,權當溫故知新.另外,既然花了那麼多時間來研究Socket,那就索性編出一個網絡版的來.

俄羅斯方塊的程序需要圖形用戶界面(GUI),而前面編的Java程序中,只有Applet程序實現了圖形界面,但那是在AppletViewer或瀏覽器的幫助下完成的.用Java來實現圖形用戶界面,我們需要用到Frame類.Frame類是窗口類(windows)類的子類,是圖形用戶界面的基本窗口.閱讀下面一個小程式並實現一下,就基本上可以對Java下的圖形用戶界面有所了解了.

文件名:FrameMemo.java
功能:彈出一個帶有菜單的框架並且在框架裡顯示信息.在窗口中任意位置點選一下,程式退出.

import java.awt.*;

public class FrameMemo extends Frame
{
public String motd;

public FrameMemo(Strings)
super在這裡代表的是父類,和this所代表的本類對應,因此這裡呼叫的是父類的建構子
motd=s;
resize(300,300);
SetMenu();
}

public FrameMemo ()//重載的建構子
{
this("This is a Memo of Frame");//這裡呼叫的是FrameMemo(S)建構子
SetMenu();
}

public void SetMenu()
{
Menu m,n;
m=new Menu("Examples");
m.add(new MenuItem("Basic"));
m.add(new MenuItem("Simple"));

nn =new Menu("More Examples");
n.add(new MenuItem("Sub Basic"));
m.add(n);

MenuBar mb=new MenuBar();
mb.add(m) ;
setMenuBar(mb);
}

public void paint(Graphics g)
{
g.drawString(motd,15,15);
g.drawString("Click anywhere to Exit",45,45)
);
}

public void start()
{
show();
}

public boolean mouseDown(Event e,int x,int y)
{
hide();//////圖片 e,int x,int y)
{
hide();/////////dispose /釋放資源
System.exit(0);
return false;
}

public static void main(String args[])
{
FrameMemo m;
m=new FrameMemo()
{
FrameMemo m;
m=new FrameMemo();
}
}

建立了窗口之後,我們還需要在窗口中擺放各種圖形界面對象,也就是說要佈局.佈局的原理在前面介紹過,需要使用到佈局容器,然後把對象按照一定的規則填進去.下面一個例子中演示了大部分我們需要用到的容器.我給出了很具體的註釋,幫助我以後一旦忘了Java的語法後,可以迅速的尋找失去的記憶.

file://佈局範例
file://j2sdk1.4.1下編譯通過

import java.awt.*;
import java.applet.*;

public class Layout extends Frame
{
Panel fnames,styles;/ /兩個字體按鈕放到fnames這個Panel中,三個風格按鈕放到styles這個Panel中
Button sans,serif;
Button bold,bigger,smaller;//定義兩個字體按鈕,三個風格按鈕
SampleCanvas sample;//定義重載後的畫布物件
String fName=new String("SansSerif");
int fBold=0;
int fSize=12;

public Layout(){
int fSize"A Memo of Layout ");
setFont(new Font("Sans",Font.BOLD,12));
setLayout(new BorderLayout());//設定BorderLayout佈局,此方式可安排五個元素
file://方位為東西南北

file://下面的程式為設定底部即南邊的兩個按鈕
fnames=new Panel();
fnames.setLayout(new GridLayout(1,2,5,10));//為panel設定GridLayout佈局
file://佈局為網格佈局
file://四個參數分別為
file://行數,列數,水平間隔(像素),垂直間隔(像素)
sans= new Button("Sans Serif");
fnames.add(sans);
serif=new Button("Sans Serif");
fnames.add(serif); file://分別加入兩個按鈕

add( fnames,"South"); file://將Panel列入BorderLayout佈局中

file://下面的程式為設定左部即西邊的三個按鈕
styles=new Panel();
styles.setLayout( new GridLayout(3,1,10,5));
bold=new Button("Bold");
styles.add(bold);
bigger=new Button("bigger");
styles.add(bigger) ;
smaller=new Button("Smaller");🎜styles.add(smaller);🎜add(styles,"West");
sample=new SampleCanvas();
add(sample,"Center");
setSize(200,200);//這句話別掉羅
// setVisible(true);

}

public void start(){
show();


public static void main(String[] args)//初始化
{
Layout MainFrame=new Layout();



class SampleCanvas extends Canvas
{
String message;

public SampleCanvas() file://類別的建構子
{
rewrite("SanSerif"); file://只在建立物件的時候執行物件, java不支援析構函式


public void rewrite(String s)
{
setFont(new Font(fName,fBold,fSize));
message="This font is"+fName;
repaint(repaint); }

public void paint(Graphics g)
{
g.drawString(message,10,50);
}
}


(1月28日)在網路版的俄羅斯方塊程式中應該包含有有以下幾個類別:

1.MainFrame:主界面類別,從Frame繼續,基本定義及類別中方法功能如下

class MainFrame extends Frame{
public MainFrame(){//初始化工作,主要是給物件(按鈕,畫布等)佈局

public boolean keyDown(Event e,int key){//處理鍵盤操作

public boolean action(Event e,Object arg){//處理滑鼠操作

public v (){//看前幾天筆記
show();
}
public static void main(String args[]) throws IOException{
MainFrame app;
app=new MainFrame();
app.start();
}
}

2.MainCanvas類別.該畫布物件將完成所有與方塊有關的邏輯操作,從Canvas類別繼續

3.Block類別,即方塊類別.該類別存有方塊的外形的資訊(一個多維數組)等等,該類將與MainCanvas類相輔相成.實際上也是可以將Block和MainCanvas做成一個類的,在我原來的C++版本中就是這樣的.但是,從面向對象的觀點來考慮,分成兩個類別比較適合.

4.ClientThread類別,即客戶端的執行緒類別

5.ServerThread類別,即伺服器端的執行緒類別

ServerThread和ClientThread負責網路同步的操作

分析到這一部工作就基本工作上完成了.我決定放棄具體實現網絡版俄羅斯方塊的計劃,因為重複我曾經十分熟悉的思路是一件十分無趣的事情.

我預備將目標鎖定在基於Java Applet的電子白板的實現上.相關的研究我會放到年後的另一個系列當中.

歷時半個月的菜鳥筆記終於結束了.15天對於任何一門語言的入門都已經足夠,究竟語言只是體現設計思想的工具,對於任何一種工具的熟悉和使用都不應該花費太多時間.如何用工具打造精美的藝術品才是應該時常在腦海中思考的.

在Java入門的過程當中,有三本書給了我不少的幫助.第一本是機械工業出版社的,由一個英國人撰寫的.書中語言條理清楚,深入淺出,兩天時間就完全可以讓你初步把握Java的基礎.給我的感覺,國外人寫最基礎的和最深奧的技術類教材都很有一手.第二本是譚浩強主編的,名副其實的入門級參考書,對初學者來說,內容比較齊全.最後一本是chm格式的Think in Java,幫助我更加深入的了解Java,尤其是線程和同步方面的內容.另外,我曾經舉過的所有關於Socket的範例都源自於網上下的一套如何用java寫Socket程式的教材.這套教材也非常實用.

好了,祝CDSN的朋友新年快樂!過年去!

附:下載地址
1.書名:Java 套接字(socket )101
註解:本教學將告訴您什麼是套接字(socket)並教您如何在Java 程式中使用它。透過實際分析幾個範例,從單一客戶機/伺服器通訊到池中的一組客戶機存取伺服器,您將學到如何用套接字處理現實世界中碰到的典型情況。
URL: http://www-900.ibm.com/developerWorks/cn/edUCation/java/j-sockets/tutorial/j-sockets.zip

2.書名:Think in Java(中文版)-- -chm格式
URL: http://www.code-labs.com/manual/Think%20In%20Java.chm

目前仍然有效 

 以上就是菜鳥初學Java的備忘錄(十)的內容,而更多相關內容請關注PHP中文網(www.php.cn)! 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn