选择显示字体大小

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

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


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons