用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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 通过实例学习Java对象的构造过程下一篇: 全面剖析Java 6中新型模态对话框API
关于用Java制作十六进制编辑器的所有评论