菜鳥初學Java的備忘錄(十) (轉)
年1月26日 星期日 雨
回顧一下昨天所學習的基於連線池的Socket,其原理中的要點如下:開放有限個PooledConnectionHandler執行緒用來處理連線;客戶的連線請求均加入到Pool連線池中(實際是linklist());PooledConnectionHandler一旦發現連線池中有連線請求,就立即著手處理;大家都使用同一個Pool(所以它是靜態變數)
目前為止,有關設計的一些基本內容都已經學習的差不多了.現在是學以致用的時候了.學習任何語言,要想真正的談得上,都應該以一個實際的為標誌的,我想.
以前用C++編過一個俄羅斯方塊,覺得這個遊戲的程式設計挺能體現物件導向的思想的.Java和C++有很多共同點,依葫蘆畫瓢誰都會,那麼就重新實現一遍吧,反正也忘得差不多了,權當溫故知新.另外,既然花了那麼多時間來研究Socket,那就索性編出一個版的來.
俄羅斯方塊的程式需要圖形介面(GUI),而前面編的Java程式中,只有Applet程式實現了圖形介面,但那是在AppletViewer或者的幫助下完成的.用Java來實現圖形使用者介面,我們需要用到Frame類.Frame類是視窗類()類的子類,是圖形使用者介面的基本視窗.閱讀下面一個小程式並實現一下,就基本上可以對Java下的圖形使用者介面有所瞭解了.
名:FrameMemo.java
功能:彈出一個帶有選單的並且在框架裡顯示資訊.在視窗中任意位置點選一下,程式退出.
import java.awt.*;
public class FrameMemo extends Frame
{
public String motd;
public FrameMemo(String s)
{
super(s);//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"));
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)
{
h();//隱藏視窗
dispose();//釋放資源
System.exit(0);
return false;
}
public static void main(String args[])
{
FrameMemo m;
m=new FrameMemo();
m.start();
}
}
建立了視窗之後,我們還需要在視窗中擺放各種圖形介面物件,也就是說要佈局.佈局的原理在前面介紹過,需要使用到佈局容器,然後把物件按照一定的規則填進去.下面一個例子中演示了大部分我們需要用到的容器.我給出了很詳細的註釋,幫助我以後一旦忘了Java的語法後,可以迅速的尋找失去的記憶.
局範例
下編譯透過
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(){
super("A Memo of Layout");
setFont(new Font("Sans",Font.BOLD,12));
setLayout(new BorderLayout());//設定BorderLayout佈局,該方式可安排五個元素
位為東西南北中
面的程式為設定底部即南邊的兩個按鈕
fnames=new Panel();
fnames.setLayout(new GridLayout(1,2,5,10));//為panel設定GridLayout佈局
佈局為網格佈局
個引數分別為
數,列數,水平間隔(畫素),垂直間隔(畫素)
sans=new Button("Sans Serif");
fnames.add(sans);
serif=new Button("Sans Serif");
fnames.add(serif); 別新增兩個按鈕
add(fnames,"South"); Panel列入BorderLayout佈局中
面的程式為設定左部即西邊的三個按鈕
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() 的建構函式
{
rewrite("SanSerif"); 在建立物件的時候,java不支援解構函式
}
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日)在網路版的俄羅斯方塊程式中,應該包含有以下幾個類:
1.MainFrame:主介面類,從Frame繼承,基本定義及類中方法功能如下
class MainFrame extends Frame{
public MainFrame(){//初始化工作,主要是給物件(按鈕,畫布等)佈局
}
public boolean keyDown(Event e,int key){//處理鍵盤操作
}
public boolean action(Event e, arg){//處理滑鼠操作
}
public void start(){//看前幾天筆記
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入門的過程當中,有三本書給了我不少的幫助.第一本是機械工業出版社的
好了,祝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:
目前仍然有效
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993960/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 菜鳥初學Java的備忘錄(二) (轉)Java
- 菜鳥初學Java的備忘錄(五) (轉)Java
- 菜鳥初學Java的備忘錄(八) (轉)Java
- 菜鳥初學Java的備忘錄(七) (轉)Java
- 菜鳥初學Java的備忘錄(九) (轉)Java
- 菜鳥初學Java的備忘錄(四) (轉)Java
- 菜鳥初學Java的備忘錄(六) (轉)Java
- 菜鳥初學Java的備忘錄(一) (轉)Java
- 菜鳥初學Java的備忘錄(三) (轉)Java
- 初學Java的備忘錄Java
- 【備忘】Java菜鳥到大牛學習路線之實戰篇Java
- 菜鳥學Java(十)——分頁查詢Java
- 【菜鳥學Java】2:初識J2EEJava
- 菜鳥學SSH(十)——Hibernate核心介面
- Java備忘錄《集合》Java
- 菜鳥學Java(十七)——Jboss瘦身Java
- 菜鳥學Java(十八)——異常Java
- 菜鳥學習SQL注射(轉)SQL
- 菜鳥學Java(九)——Servlet的基本配置JavaServlet
- Java備忘錄《“==” 和 “equals”》Java
- Linux C++ 自學筆記之二<菜鳥初學系列> (轉)LinuxC++筆記
- 菜鳥學Java(十六)——Jboss簡介Java
- 菜鳥學Java(十一)——GET與POSTJava
- 【菜鳥學Java】11:Session技術JavaSession
- 【菜鳥學Java】10:Cookie技術JavaCookie
- 【菜鳥學Java】4:Servlet 技術JavaServlet
- Dart 學習備忘錄Dart
- 菜鳥學Java(十四)——Java反射機制(一)Java反射
- 菜鳥學Java(十五)——Java反射機制(二)Java反射
- 菜鳥學堂之破解Sessioncookie的方法(轉)SessionCookie
- IT菜鳥的學習生活
- 【菜鳥學Java】7:JSP的基本語法JavaJS
- java菜鳥入門Java
- 菜鳥學資料庫(五)——MySQL必備命令資料庫MySql
- 備忘錄
- 【備忘錄】
- 菜鳥學Java(四)——JSP內建物件JavaJS物件
- Java備忘錄《語言特點》Java