网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  菜鸟初学java的备忘录(十)     
  文章作者:未知  文章来源:水木森林  
  查看:109次  录入:管理员--2007-11-17  
 
回顾一下昨天所学习的基于连接池的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

目前仍然有效
 
 
上一篇: 菜鸟初学java的备忘录(九)    下一篇: 参数上溯造型解决了错误的方法调用
  相关文档
sender id框架规范概述 11-17
java捕获当前屏幕图像 11-17
在jsp中使用session制作简单的登录模块 11-16
jakarta struts应用的七个经验(1) 11-17
java编程中应用dom4j轻松地处理xml文档 11-16
java常见缩略词及英文对照 11-17
java开发员认证 11-16
java常见问题集锦(来自sun中国官方站) 11-17
pdf背景灰色图片设定方法 11-17
java热点:质疑 apache和yaws性能比较 11-16
volumename 属性 11-16
构建自己的基于java的超级计算机 11-17
hibernate iterator jcs分析 11-17
利用反射简化struts的actionform的验证 11-17
分页显示从数据库中读出的记录 11-16
诺基亚亲密接触eclipse 深化开源战略 11-17
jsp/servlet/jsf:servlet/jsp配置详解 03-06
一个java编程老手的设计语录 11-17
使用 ant 协助高效开发 java 项目 11-17
连接到网络服务器上并发送数据,随后接收服务器发送来的数据 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息