分享
 
 
 

菜鸟初学Java的备忘录(十)

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

2003年1月26日 星期日 雨

回顾一下昨天所学习的基于连接池的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(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)

{

hide();//隐藏窗口

dispose();//释放资源

System.exit(0);

return false;

}

public static void main(String args[])

{

FrameMemo m;

m=new FrameMemo();

m.start();

}

}

建立了窗口之后,我们还需要在窗口中摆放各种图形界面对象,也就是说要布局.布局的原理在前面介绍过,需要使用到布局容器,然后把对象按照一定的规则填进去.下面一个例子中演示了大部分我们需要用到的容器.我给出了很详细的注释,帮助我以后一旦忘了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(){

super("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();

MainFrame.start();

}

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();

}

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 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入门的过程当中,有三本书给了我不少的帮助.第一本是机械工业出版社的<Java简明教程>,由一个英国人撰写的.书中语言条理清楚,深入浅出,两天时间就完全可以让你初步掌握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

目前仍然有效

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有