OMG,到底在尋找什么..................
          (構(gòu)造一個(gè)完美的J2EE系統(tǒng)所需要的完整知識(shí)體系)
          posts - 198,  comments - 37,  trackbacks - 0
          原貼地址:http://www.gbunix.com/htmldata/2004_12/14/19/article_770_1.html

          回顧一下昨天所學(xué)習(xí)的基于連接池的Socket,其原理中的要點(diǎn)如下:服務(wù)器開放有限個(gè)PooledConnectionHandler線程用來處理連接;客戶的連接請(qǐng)求均加入到Pool連接池中(實(shí)際是linklist()對(duì)象);PooledConnectionHandler一旦發(fā)現(xiàn)連接池中有連接請(qǐng)求,就立即著手處理;大家都使用同一個(gè)Pool(所以它是靜態(tài)變量)

          目前為止,有關(guān)Java程序設(shè)計(jì)的一些基本內(nèi)容都已經(jīng)學(xué)習(xí)的差不多了.現(xiàn)在是學(xué)以致用的時(shí)候了.學(xué)習(xí)任何語言,要想真正的談得上入門,都應(yīng)該以一個(gè)實(shí)際的編程經(jīng)驗(yàn)為標(biāo)志的,我想.

          以前用C++編過一個(gè)俄羅斯方塊,覺得這個(gè)游戲的程序設(shè)計(jì)挺能體現(xiàn)面向?qū)ο蟮乃枷氲?Java和C++有很多共同點(diǎn),依葫蘆畫瓢誰都會(huì),那么就重新實(shí)現(xiàn)一遍吧,反正也忘得差不多了,權(quán)當(dāng)溫故知新.另外,既然花了那么多時(shí)間來研究Socket,那就索性編出一個(gè)網(wǎng)絡(luò)版的來.

          俄羅斯方塊的程序需要圖形用戶界面(GUI),而前面編的Java程序中,只有Applet程序?qū)崿F(xiàn)了圖形界面,但那是在AppletViewer或者瀏覽器的幫助下完成的.用Java來實(shí)現(xiàn)圖形用戶界面,我們需要用到Frame類.Frame類是窗口類(windows)類的子類,是圖形用戶界面的基本窗口.閱讀下面一個(gè)小程序并實(shí)現(xiàn)一下,就基本上可以對(duì)Java下的圖形用戶界面有所了解了.

          文件名:FrameMemo.java
          功能:彈出一個(gè)帶有菜單的框架并且在框架里顯示信息.在窗口中任意位置點(diǎn)擊一下,程序退出.

          import java.awt.*;

          public class FrameMemo extends Frame
          {
          ? public String motd;

          ? public FrameMemo(String s)
          ? {
          ??? super(s);//super在這里代表的是父類,和this所代表的本類相應(yīng),因此這里調(diào)用的是父類的構(gòu)造函數(shù)
          ??? motd=s;
          ??? resize(300,300);
          ??? SetMenu();
          ? }

          ? public FrameMemo()//重載的構(gòu)造函數(shù)
          ? {
          ??? this("This is a Memo of Frame");//這里調(diào)用的是FrameMemo(S)構(gòu)造 函數(shù)
          ??? SetMenu();
          ? }

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

          ??? n=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();//隱藏窗口
          ??? dispose();//釋放資源
          ??? System.exit(0);
          ??? return false;
          ? }

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

          建立了窗口之后,我們還需要在窗口中擺放各種圖形界面對(duì)象,也就是說要布局.布局的原理在前面介紹過,需要使用到布局容器,然后把對(duì)象按照一定的規(guī)則填進(jìn)去.下面一個(gè)例子中演示了大部分我們需要用到的容器.我給出了很詳細(xì)的注釋,幫助我以后一旦忘了Java的語法后,可以迅速的尋找失去的記憶.

          file://布局范例
          file://j2sdk1.4.1下編譯通過

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

          public class Layout extends Frame
          {
          ? Panel fnames,styles;//兩個(gè)字體按鈕放到fnames這個(gè)Panel中,三個(gè)風(fēng)格按鈕放到styles這個(gè)Panel中
          ? Button sans,serif;
          ? Button bold,bigger,smaller;//定義兩個(gè)字體按鈕,三個(gè)風(fēng)格按鈕
          ? SampleCanvas sample;//定義重載后的畫布對(duì)象
          ? String fName=new String("SansSerif");
          ? int fBold=0;
          ? int fSize=12;

          ? public Layout(){
          ??? super("A Memo of Layout");
          ??? setFont(new Font("Sans",Font.BOLD,12));
          ??? setLayout(new BorderLayout());//設(shè)置BorderLayout布局,該方式可安排五個(gè)元素
          ????????????????????????????????? file://方位為東西南北中

          file://下面的程序?yàn)樵O(shè)置底部即南邊的兩個(gè)按鈕
          ??? fnames=new Panel();
          ??? fnames.setLayout(new GridLayout(1,2,5,10));//為panel設(shè)置GridLayout布局
          ?????????????????????????????????????????????? file://該布局為網(wǎng)格布局
          ?????????????????????????????????????????????? file://四個(gè)參數(shù)分別為
          ?????????????????????????????????????????????? file://行數(shù),列數(shù),水平間隔(像素),垂直間隔(像素)
          ??? sans=new Button("Sans Serif");
          ??? fnames.add(sans);
          ??? serif=new Button("Sans Serif");
          ??? fnames.add(serif);??????????????????????? file://分別添加兩個(gè)按鈕

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

          file://下面的程序?yàn)樵O(shè)置左部即西邊的三個(gè)按鈕
          ??? 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();
          ??? MainFrame.start();
          ???
          ? }

          ? class SampleCanvas extends Canvas
          ? {
          ??? String message;

          ??? public SampleCanvas()??? file://類的構(gòu)造函數(shù)
          ??? {
          ????? rewrite("SanSerif");?? file://只在創(chuàng)建對(duì)象的時(shí)候執(zhí)行,java不支持析構(gòu)函數(shù)
          ??? }

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

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

          (1月28日)在網(wǎng)絡(luò)版的俄羅斯方塊程序中,應(yīng)該包含有以下幾個(gè)類:

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

          class MainFrame extends Frame{
          ? public MainFrame(){//初始化工作,主要是給對(duì)象(按鈕,畫布等)布局
          ? }?
          ? public boolean keyDown(Event e,int key){//處理鍵盤操作
          ? }
          ? public boolean action(Event e,Object arg){//處理鼠標(biāo)操作
          ? }???
          ? public void start(){//看前幾天筆記
          ??? show();
          ? }
          ? public static void main(String args[]) throws IOException{
          ??? MainFrame app;
          ??? app=new MainFrame();
          ??? app.start();?
          ? }
          }

          2.MainCanvas類.該畫布對(duì)象將完成所有與方塊有關(guān)的邏輯操作,從Canvas類繼承

          3.Block類,即方塊類.該類存有方塊的形狀的信息(一個(gè)多維數(shù)組)等等,該類將與MainCanvas類相輔相成.實(shí)際上也是可以將Block和MainCanvas做成一個(gè)類的,在我原來的C++版本中就是這樣的.但是,從面向?qū)ο蟮挠^點(diǎn)來考慮,分成兩個(gè)類比較合適.

          4.ClientThread類,即客戶端的線程類

          5.ServerThread類,即服務(wù)器端的線程類

          ServerThread和ClientThread負(fù)責(zé)網(wǎng)絡(luò)同步的操作

          分析到這一部工作就基本上完成了.我決定放棄具體實(shí)現(xiàn)網(wǎng)絡(luò)版俄羅斯方塊的計(jì)劃,因?yàn)橹貜?fù)我曾經(jīng)十分熟悉的思路是一件十分無趣的事情.

          我準(zhǔn)備將目標(biāo)鎖定在基于Java Applet的電子白板的實(shí)現(xiàn)上.相關(guān)的研究我會(huì)放到年后的另一個(gè)系列當(dāng)中.

          歷時(shí)半個(gè)月的菜鳥筆記終于結(jié)束了.15天對(duì)于任何一門語言的入門都已經(jīng)足夠,畢竟語言只是體現(xiàn)設(shè)計(jì)思想的工具,對(duì)于任何一種工具的熟悉和使用都不應(yīng)該花費(fèi)太多時(shí)間.如何用工具打造精美的藝術(shù)品才是應(yīng)該時(shí)常在腦海中思索的.

          在Java入門的過程當(dāng)中,有三本書給了我不少的幫助.第一本是機(jī)械工業(yè)出版社的<Java簡明教程>,由一個(gè)英國人撰寫的.書中語言條理清楚,深入淺出,兩天時(shí)間就完全可以讓你初步掌握J(rèn)ava的基礎(chǔ).給我的感覺,國外人寫最基礎(chǔ)的和最深?yuàn)W的技術(shù)類教材都很有一手.第二本是譚浩強(qiáng)主編的<Java程序設(shè)計(jì)>,名副其實(shí)的入門級(jí)參考書,對(duì)初學(xué)者來說,內(nèi)容比較齊全.最后一本是chm格式的Think in Java,幫助我更加深入的了解Java,尤其是線程和同步方面的內(nèi)容.另外,我曾經(jīng)舉過的所有關(guān)于Socket的范例都源自于網(wǎng)上下的一套如何用java編寫Socket程序的教材.這套教材也非常實(shí)用.

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

          附:下載地址
          1.書名:Java 套接字(socket)101
          ?? 注釋:本教程將告訴您什么是套接字(socket)并教您如何在 Java 程序中使用它。通過實(shí)際分析幾個(gè)示例,從單個(gè)客戶機(jī)/服務(wù)器通訊到池中的一組客戶機(jī)訪問服務(wù)器,您將學(xué)到如何用套接字處理現(xiàn)實(shí)世界中碰到的典型情形。
          ?? 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

          目前仍然有效

          posted on 2006-11-22 10:16 OMG 閱讀(260) 評(píng)論(0)  編輯  收藏 所屬分類: Soket

          <2006年11月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          IT風(fēng)云人物

          文檔

          朋友

          相冊(cè)

          經(jīng)典網(wǎng)站

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 潮安县| 福安市| 荔浦县| 牙克石市| 宁陵县| 油尖旺区| 工布江达县| 舟曲县| 台北市| 肃北| 太白县| 汾西县| 西乡县| 庆城县| 台东市| 泸定县| 新巴尔虎右旗| 东源县| 赞皇县| 冷水江市| 交口县| 凉山| 高淳县| 九寨沟县| 延庆县| 广丰县| 大兴区| 苏尼特右旗| 长沙县| 平南县| 延庆县| 成安县| 容城县| 和田市| 达日县| 宝鸡市| 铜鼓县| 岳西县| 台湾省| 株洲市| 文水县|