快速业务通道

用Java制作十六进制编辑器

作者 凌众技术 来源 互联网 浏览 发布时间 2012-01-14
    };
}
这里的bytesToStr方法有两点特别需要注意的地方,一是不可见字符,如果不屏蔽这些字符,则我们的编辑器的显示格式会被搞得乱七八糟,一般可以把ASCII值0到0×1F和0×7F的33个字符全部替换成0×2E,即字符小数点。二是中文字符,因为每个中文字符是2个字节,如果数据块的起始字节一个中文字符的一半(可以用ASCII值大于0×7F来判断)的时候,将会显示一串乱字符,处理方法是不显示该字节。

为叙述方便,我们把canvas中显示每一行的行标的区域称为标号区,它宽度固定为8个字符(6个字符显示标号,一个冒号和一个空格);把canvas中显示十六进制数据的区域称为数据区,宽度固定为48个字符(每字节用十六进制显示为2字符宽,两两之间有一个空格,则总宽为16×3);把canvas中每行以字符串形式显示数据的区域称为字串值区,宽度不定(最短为8个字符――全中文状态,最长为16个字符――全英文状态)。

我们的canvas是一个Swing的文本组件,我们不但用它显示数据,还显示标号和字串值,而只有数据才是允许被编辑的,所以我们给canvas增加了CaretListener和KeyListener,当输入光标落在不允许编辑的区域时,我们要把光标自动移到最近的允许编辑的地方去。

public void caretUpdate(CaretEvent e) {
    // 这个方法在输入光标移动时被触发

    // 输入光标相对canvas第0行第0个字符的偏移量
    int pos = canvas.getCaretPosition();
    int line = 0;
    int startPos = 0;
    try {
        // 输入光标位于第几行
        line = canvas.getLineOfOffset(pos);

        // 当前行的第0个字符相对canvas第0行第0个字符的偏移量
        startPos = canvas.getLineStartOffset(line);
    }catch(BadLocationException exception) { }

    if(pos - startPos < 8)  // 输入光标在标号区

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号