`
大器晚成
  • 浏览: 52812 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

JMonkeyEngine jme里JMEDesktop输入中文解决方案

阅读更多
修改该类源代码,主要是这两个方法。测试环境简体中文XP3测试通过
  
//                                  Properties   props   =   System.getProperties();
//                                  String charset=props.getProperty("sun.jnu.encoding");
// "GBK"是输入时的环境,一般中文输入法都采用该字符集吧
char chcode=0;
    public void onKey( final char character, final int keyCode, final boolean pressed ) {
        System.out.println("--"+(int)character);
        if (chcode==0) {
            chcode=character;
            if (character>127) {                
                return;
            }
        }else {
            int temp=chcode;
            chcode = (char) (character + (chcode << 8));
            System.out.println(((int)temp<< 8)+"+"+(int)(character)+"="+((int)chcode));

        }
        try {
            SwingUtilities.invokeAndWait( new Runnable() {
                public void run() {
                    sendAWTKeyEvent( keyCode, pressed, chcode);
                    chcode=0;
                }
            } );
        } catch ( InterruptedException e ) {
            logger.logp(Level.SEVERE, this.getClass().toString(),
                    "onKey(character, keyCode, pressed)", "Exception", e);
        } catch ( InvocationTargetException e ) {
            logger.logp(Level.SEVERE, this.getClass().toString(),
                    "onKey(character, keyCode, pressed)", "Exception", e);
        }
    }

    private void sendAWTKeyEvent( int keyCode, boolean pressed, char character ) {
        keyCode = AWTKeyInput.toAWTCode( keyCode );
        try {
        if ( keyCode != 0 ) {
            Component focusOwner = getFocusOwner();
            if ( focusOwner == null ) {
                focusOwner = desktop;
            }
            if ( character == '\0' ) {
                character = KeyEvent.CHAR_UNDEFINED;
            }
            if ( focusOwner != null ) {
                System.out.println("sendAWTKeyEvent:"+(int)character);
                if ( pressed ) {
                    KeyEvent event = new KeyEvent( focusOwner, KeyEvent.KEY_PRESSED,
                            System.currentTimeMillis(), getCurrentModifiers( -1 ),
                            keyCode, character );
                    dispatchEvent( focusOwner, event );
                    System.out.println("dispatchEvent1:"+(int)character);
                    anInt.value = keyCode;
                    Char c = characters.get( anInt );
                    if ( c == null ) {
                        characters.put( new Int( keyCode ), new Char( character ) );
                    }
                    else {
                        c.value = character;
                    }
                    if ( character != KeyEvent.CHAR_UNDEFINED ) {
                        dispatchEvent( focusOwner, new KeyEvent( focusOwner, KeyEvent.KEY_TYPED,
                                System.currentTimeMillis(), getCurrentModifiers( -1 ),
                                0, character ) );
                        System.out.println("dispatchEvent2:"+(int)character);
                    }
                }
                if ( !pressed ) {
                    anInt.value = keyCode;
//                    Char c = characters.get( anInt );
//                    if ( c != null ) {
//                        character = c.value;
//                        //TODO: repeat input
////                        if ( character != KeyEvent.CHAR_UNDEFINED ) {
////                            dispatchEvent( focusOwner, new KeyEvent( focusOwner, KeyEvent.KEY_TYPED,
////                                    System.currentTimeMillis(), getCurrentModifiers( -1 ),
////                                    0, character ) );
////                        }
//                    }
                    System.out.println(focusOwner instanceof JTextField);
                    System.out.println((int)character+","+(character>255&&character<65535));
                    if (character>255&&character<65535) {
                        if (focusOwner instanceof JTextField) {
                            ((JTextField)focusOwner).getDocument().insertString(((JTextField)focusOwner).getCaretPosition(), new String(new byte[]{(byte)(character/256),(byte)(character%256)},"gbk"), null);//getDocument().getStartPosition().insertString(zOrder, name, null);
                            System.out.println("---"+new String(new byte[]{(byte)(character/256),(byte)(character%256)},"gbk").toCharArray()[0]);
                        }
                    }else {
                        dispatchEvent( focusOwner, new KeyEvent( focusOwner, KeyEvent.KEY_RELEASED,
                            System.currentTimeMillis(), getCurrentModifiers( -1 ),
                            keyCode, character ) );
                    }
                }
            }
        }
        } catch (Exception e) {

        }
    }
0
0
分享到:
评论

相关推荐

    JMonkeyEngine 中文教程

    JMonkeyEngine(JME)是一个强大的开源3D游戏引擎,专为Java开发者设计。这个中文教程旨在帮助初学者和有经验的程序员掌握JMonkeyEngine的使用,创建出引人入胜的3D游戏和应用程序。教程共分为12个章节,确保覆盖了...

    JME3中文教程(ZBP第一版)

    5. **丰富的社区支持**:JMonkeyEngine有一个活跃的社区,提供了许多示例代码、插件和教程,方便开发者解决问题和分享经验。 本教程“学习JMonkey3(英文原版).pdf”和“学习JMonkey3(中文版ZBP翻译第一版).pdf”...

    jMonkeyEngine JavaDoc文档

    jMonkeyEngine(jME)是Java开发者用于创建三维游戏和应用程序的强大工具。作为一个开源的Java 3D引擎,它提供了一系列先进的图形功能,包括实时光照、动态阴影、粒子系统、物理模拟等,使得开发者能够构建出视觉...

    jMonkeyEngine 3 概要

    jMonkeyEngine有一个活跃的社区,提供了大量的教程、示例代码和插件,便于初学者上手和经验丰富的开发者解决问题。官方文档详细介绍了各个组件的使用方法,帮助开发者充分利用引擎的功能。 ### 8. **跨平台性** ...

    JME中文教程.pdf

    ### JME中文教程知识点概述 #### 一、jMonkeyEngine3简介 - **定义与特点**:jMonkeyEngine3(简称JME3)是一款纯Java编写的免费3D游戏引擎,具备丰富的功能集,适用于各类游戏开发需求。该引擎不仅功能全面,其...

    JME3学习文档

    ### JME3游戏开发引擎中文学习指南 #### 引言 JME3,全称jMonkeyEngine3,是一款开源的3D游戏开发引擎,专为Java开发者设计,旨在简化3D游戏和应用程序的开发过程。本文档将详细介绍如何在Netbeans6.x环境下搭建...

    jMonkeyEngine 3.0 Beginner's Guide

    同时,对于希望跨平台发布游戏的开发者而言,jMonkeyEngine 3.0提供了良好的解决方案。 #### 二、OpenGL 和 Java 技术要点 - **OpenGL简介**:OpenGL是一种用于渲染2D、3D矢量图形的应用程序接口(API)。它在...

    jme3游戏demo rise-of-mutants

    玩家的输入处理也是游戏交互的重要部分,jme3支持键盘、鼠标、游戏手柄等多种输入设备。 **7. 游戏逻辑与AI** “Rise of Mutants”的游戏逻辑和敌人AI可能由一系列状态机和行为树实现。开发者通过编写脚本或使用...

    学习JMonkey3_中文版ZBP翻译第一版_.pdf

    ### JMonkeyEngine 3 (JME3) 中文教程概览 #### 一、JMonkeyEngine 3 简介 JMonkeyEngine 3 (简称 JME3) 是一款用 Java 语言编写的免费开源 3D 游戏引擎。它提供了一套完整的工具和 API,用于创建交互式 3D 应用...

    jmonkeyengine纯Java编写的一个完整的3D游戏开发套件

    1. **全栈解决方案**:jMonkeyEngine提供了一个完整的开发环境,包括场景管理、物理引擎、音频处理、光照和阴影效果、网络同步以及用户界面等组件,几乎涵盖了游戏开发的各个方面。 2. **高性能**:由于其基于Java...

    jme3材质基础知识

    本文将详细讲解"jme3材质基础知识",主要围绕jMonkeyEngine3(简称jME3)这个强大的开源Java游戏开发引擎。 jMonkeyEngine3是一个基于现代图形技术如OpenGL的3D游戏引擎,它为开发者提供了丰富的工具和库,简化了...

    JME的文件格式及支持的文件格式

    **JMonkeyEngine 3 (JME3) 文件格式详解** JMonkeyEngine 3(简称JME3)是一款开源的游戏开发引擎,专为构建3D游戏和应用而设计。它支持多种文件格式,使得开发者能够方便地导入和管理游戏资源。以下是对JME3支持的...

    jme3-clj-aide:JMonkeyEngine3 + Clojure-Android + AIDE 示例项目

    JMonkeyEngine3(简称JME3)是一款强大的开源3D游戏引擎,它基于Java语言,提供了丰富的图形渲染功能,使得开发者能够创建高质量的3D游戏。而Clojure则是一种现代的、动态类型的Lisp方言,以其简洁的语法和强大的...

    Jmonkeyengine3.0BeginnersGuide.pdf 英文原版

    Jmonkeyengine 3.0 Beginners Guide

    jMonkeyEngine 入门学习

    jMonkeyEngine 的输入系统提供了一个强大且灵活的输入机制,允许开发者轻松地处理用户输入事件。 在这个教程中,开发者将学习如何使用 jMonkeyEngine 的输入系统,处理用户输入事件,实现游戏逻辑更新和渲染。 1.6...

Global site tag (gtag.js) - Google Analytics