Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 339|回复: 0

[J2ME学习]使用NetBeans进行J2ME开发(三):低级图形用户界面

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-11 06:08:31 | 显示全部楼层 |阅读模式
    在这一篇中,我将向大家介绍图形用户界面中的低级图形用户界面。所谓低级图形用户界面,指的是那种我们可以自己在上面画图的控件,它是和TextBox,List等等这些用户控件刚好相对的概念,因为这些用户控件的形状是事先画好的,无需我们程序员操心,所以称为高级图形界面。低级图形用户界面什么东西都需要我们自己画,所以比较复杂,当然也更加灵活,只有想不到,没有画不出,所以我们先介绍它。

         在J2ME开发中,低级图形用户界面是由javax.microedition.lcdui.Canvas类实现的,我们只要继承这个类,并实现这个类的paint方法,就可以随心所欲的进行绘画了。当然,绘画之前,我们少不了要了解我们的手机屏幕究竟有多大的画图空间,这可以通过调用Canvas类的getWidth和getHeight方法实现。

          下面是一个简短的程序,向大家演示了怎么获画布的大小,同时,也算是一个小小的框架。首先,当然是创建我们自己的画布,代码如下:  
      
       
       
         
       

         
       
      



    package
      com.xkland.j2me;


    import
      javax.microedition.lcdui.Canvas;

    import
      javax.microedition.lcdui.Graphics;


    /** */
    /**
    *
    * @author 海边沫沫
    */


    public
      
    class
      MyCanvas
    extends
      Canvas

    {
       
        /** *//** Creates a new instance of MyCanvas */
        public MyCanvas() {
        }
       
        public void clearBackground(Graphics g){
            int color = g.getColor();
            g.setColor(0xffffff);
            g.fillRect(0,0,getWidth(),getHeight());
            g.setColor(color);
        }
       
        public void paint(Graphics g){
            //清除背景
            clearBackground(g);
            
            //显示可供绘图的区域的大小
            g.drawString("宽度:",10,10,Graphics.LEFT|Graphics.TOP);
            g.drawString(String.valueOf(getWidth()),50,10,Graphics.LEFT|Graphics.TOP);
            g.drawString("高度:",10,25,Graphics.LEFT|Graphics.TOP);
            g.drawString(String.valueOf(getHeight()),50,25,Graphics.LEFT|Graphics.TOP);
        }
       
    }

    第二个类当然就是我们的Midlet了,因为它是主程序嘛。在程序启动的时候调用display.setCurrent将画布设置为主界面,同时设置事件监听器。代码比较简单,如下:




    package
      com.xkland.j2me;


    import
      javax.microedition.midlet.
    *
    ;

    import
      javax.microedition.lcdui.
    *
    ;


    /** */
    /**
    *
    * @author  海边沫沫
    * @version
    */


    public
      
    class
      CanvasTest
    extends
      MIDlet

    {
        private Canvas canvas = new MyCanvas();
        private Display display = null;
        private Command exitCommand = new Command("退出",Command.EXIT,1);
       
        public void startApp() {
            if(display==null){
                display = Display.getDisplay(this);
                canvas.addCommand(exitCommand);
                canvas.setCommandListener(new MyCommandListener(this,canvas));
                display.setCurrent(canvas);
            }
        }
       
        public void pauseApp() {
        }
       
        public void destroyApp(boolean unconditional) {
        }
    }

    第三个类当然是我们的事件监听器类了,等一下我们会讲到,Canvas支持许多低级事件,比如键盘的按键事件,所以我们这里把事件监听器单独抽取出来,代码如下:





    package
      com.xkland.j2me;


    import
      javax.microedition.lcdui.CommandListener;

    import
      javax.microedition.lcdui.Command;

    import
      javax.microedition.lcdui.Displayable;

    import
      javax.microedition.lcdui.Canvas;


    /** */
    /**
    *
    * @author 海边沫沫
    */


    public
      
    class
      MyCommandListener
    implements
      CommandListener

    {
       
        private CanvasTest app;
        private Canvas canvas;
       
        /** *//** Creates a new instance of MyCommandListener */
        public MyCommandListener(CanvasTest app,Canvas canvas) {
            this.app = app;
            this.canvas = canvas;
        }
       
        public void commandAction(Command cmd, Displayable displayable){
            if(cmd.getLabel().equalsIgnoreCase("退出")){
                app.destroyApp(false);
                app.notifyDestroyed();
            }
        }
       
    }

    下面是运行效果:




    知道了画图区域的大小,同时又知道Canvas可以支持许多低级事件,我们就可以发挥我们自己的想象力创建一个小游戏了。下面,我将写一个简单的拼图游戏,只需要使用上下左右四个方向键操作即可,在事件监听器中,我们只需响应Canvas的keyPressed()事件即可。代码也不复杂,只需把上面的程序稍加扩展即可。当然,我们还需要准备一些图片当素材。



      
      
       
       

         
       

         
       
      
    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 06:52 , Processed in 0.410521 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表