欢迎光临
我们一直在努力

jb中的光标问题-JSP教程,开发工具

建站超值云服务器,限时71元/月

jbuilder中的光标问题由来已久,从jb4(我所用过的第一个jb版本,另:本文中jb乃jbuilder的缩写)到最新的jbx,凡是代码中有粗体或者斜体字的行,光标总是出现在错误的位置上,给编成带来诸多不便,影响程序员的心情和效率。早期的解决办法主要是修改jbuilder本身的代码显示方案,或者更改字体,或者将所有的粗体和斜体及粗斜体改为正常字体。虽然这些方法可以基本解决光标位置不对的问题,但都在一定程度上影响的视觉效果或者降低了jb的代码语法标亮功能,例如在jbx中子类如果覆盖了的父类中定义的某个方法,那么在子类中该方法名是斜体的。后来随着jb的发展普及,受此问题影响的人越来越多,越来越让人觉得不爽,因此有高手对此问题追根溯源,原来问题真正的根源在于jre而非jb。在jre中有些针对不同国家地区和语言而定义的字体属性文件(<jre_dir>/lib/font.properties*),其中和我国有关的font.properties.zh文件的内容有些不妥,从而导致了上述问题。这同时也解释了为什么其他国家及港台地区的jb用户几乎没有出现过此类问题(除非她的操作系统中所在区域选在中国大陆)。但为什么只有jb出现了这类问题,而其他运行于jre的java程序没有此类问题呢?主要是其他程序很少用到粗体和斜体,另外和所用的字体也有关系,只有使用了font.properties.zh中所列的组合字体(component font)的粗体和斜体时才会出现光标错位。网上之前出现过对这个文件的修改方案,例如添加need_converted和修改exclusion ranges,也不能从根本上解决该问题。

由于只有中国大陆区域的用户碰到此类问题,因此其他区域对应的font.properties*文件应该没有问题。经过和font.properties文件的对比,可以看出font.properties.zh中究竟哪里出了问题——组合字体映射部分(component font mappings)中对于每种字体的粗体和斜体,都映射到了常规字体,而没有映射到相应的粗体和斜体,由此导致了jb等应用程序在对粗体或者斜体字符所占宽度计算时,是按照常规字体的宽度进行的,进而导致了光标的显示位置和实际位置不符。如dialoginput.bold.0,对应于字体为courier new,粗体英文字母,正确的映射应该是dialoginput.bold.0=courier new bold,ansi_charset,而在font.properties.zh中映射为dialoginput.bold.0=courier new,ansi_charset(注:没有bold)。

针对这种情况,可以对font.properties.zh进行修改,将所有不正确的映射分别加上bold,italic或者bold italic。这样jb和其他java程序就不会有光标错位的问题了。

还应注意的是,真正与中国大陆地区对应的font.properties文件名应为font.properties.zh_cn,由于jre中默认没有这个文件,因此会使用范围最接近的文件font.properties.zh。所以如果<jre_dir>/lib/下有font.properties.zh_cn,则应优先修改该文件。另外,font.properties.zh.98文件可能是windows 9x系统中所使用的,因此如果操作系统为windows 9x,应修改该文件。

附修改后的font.properties.zh文件内容:

# @(#)font.properties.zh 1.10 02/03/07

#

# copyright 2002 sun microsystems, inc. all rights reserved.

# modified by yue feng. 11/24/2003

# component font mappings

#

dialog.plain.0=arial,ansi_charset

dialog.plain.1=\u5b8b\u4f53,gb2312_charset

dialog.plain.2=wingdings,symbol_charset

dialog.plain.3=symbol,symbol_charset

dialog.bold.0=arial bold,ansi_charset

dialog.bold.1=\u5b8b\u4f53,gb2312_charset

dialog.bold.2=wingdings,symbol_charset

dialog.bold.3=symbol,symbol_charset

dialog.italic.0=arial italic,ansi_charset

dialog.italic.1=\u5b8b\u4f53,gb2312_charset

dialog.italic.2=wingdings,symbol_charset

dialog.italic.3=symbol,symbol_charset

dialog.bolditalic.0=arial bold italic,ansi_charset

dialog.bolditalic.1=\u5b8b\u4f53,gb2312_charset

dialog.bolditalic.2=wingdings,symbol_charset

dialog.bolditalic.3=symbol,symbol_charset

dialoginput.0=courier new,ansi_charset

dialoginput.1=\u5b8b\u4f53,gb2312_charset

dialoginput.2=wingdings,symbol_charset

dialoginput.3=symbol,symbol_charset

dialoginput.plain.0=courier new,ansi_charset

dialoginput.plain.1=\u5b8b\u4f53,gb2312_charset

dialoginput.plain.2=wingdings,symbol_charset

dialoginput.plain.3=symbol,symbol_charset

dialoginput.bold.0=courier new bold,ansi_charset

dialoginput.bold.1=\u5b8b\u4f53,gb2312_charset

dialoginput.bold.2=wingdings,symbol_charset

dialoginput.bold.3=symbol,symbol_charset

dialoginput.italic.0=courier new italic,ansi_charset

dialoginput.italic.1=\u5b8b\u4f53,gb2312_charset

dialoginput.italic.2=wingdings,symbol_charset

dialoginput.italic.3=symbol,symbol_charset

dialoginput.bolditalic.0=courier new bold italic,ansi_charset

dialoginput.bolditalic.1=\u5b8b\u4f53,gb2312_charset

dialoginput.bolditalic.2=wingdings,symbol_charset

dialoginput.bolditalic.3=symbol,symbol_charset

serif.plain.0=times new roman,ansi_charset

serif.plain.1=\u5b8b\u4f53,gb2312_charset

serif.plain.2=wingdings,symbol_charset

serif.plain.3=symbol,symbol_charset

serif.bold.0=times new roman bold,ansi_charset

serif.bold.1=\u5b8b\u4f53,gb2312_charset

serif.bold.2=wingdings,symbol_charset

serif.bold.3=symbol,symbol_charset

serif.italic.0=times new roman italic,ansi_charset

serif.italic.1=\u5b8b\u4f53,gb2312_charset

serif.italic.2=wingdings,symbol_charset

serif.italic.3=symbol,symbol_charset

serif.bolditalic.0=times new roman bold italic,ansi_charset

serif.bolditalic.1=\u5b8b\u4f53,gb2312_charset

serif.bolditalic.2=wingdings,symbol_charset

serif.bolditalic.3=symbol,symbol_charset

sansserif.plain.0=arial,ansi_charset

sansserif.plain.1=\u5b8b\u4f53,gb2312_charset

sansserif.plain.2=wingdings,symbol_charset

sansserif.plain.3=symbol,symbol_charset

sansserif.bold.0=arial bold,ansi_charset

sansserif.bold.1=\u5b8b\u4f53,gb2312_charset

sansserif.bold.2=wingdings,symbol_charset

sansserif.bold.3=symbol,symbol_charset

sansserif.italic.0=arial italic,ansi_charset

sansserif.italic.1=\u5b8b\u4f53,gb2312_charset

sansserif.italic.2=wingdings,symbol_charset

sansserif.italic.3=symbol,symbol_charset

sansserif.bolditalic.0=arial bold italic,ansi_charset

sansserif.bolditalic.1=\u5b8b\u4f53,gb2312_charset

sansserif.bolditalic.2=wingdings,symbol_charset

sansserif.bolditalic.3=symbol,symbol_charset

monospaced.0=courier new,ansi_charset

monospaced.plain.1=\u5b8b\u4f53,gb2312_charset

monospaced.plain.2=wingdings,symbol_charset

monospaced.plain.3=symbol,symbol_charset

monospaced.bold.0=courier new bold,ansi_charset

monospaced.bold.1=\u5b8b\u4f53,gb2312_charset

monospaced.bold.2=wingdings,symbol_charset

monospaced.bold.3=symbol,symbol_charset

monospaced.italic.0=courier new italic,ansi_charset

monospaced.italic.1=\u5b8b\u4f53,gb2312_charset

monospaced.italic.2=wingdings,symbol_charset

monospaced.italic.3=symbol,symbol_charset

monospaced.bolditalic.0=courier new bold italic,ansi_charset

monospaced.bolditalic.1=\u5b8b\u4f53,gb2312_charset

monospaced.bolditalic.2=wingdings,symbol_charset

monospaced.bolditalic.3=symbol,symbol_charset

# font file names

#

filename.\u5b8b\u4f53=simsun.ttc

filename.arial=arial.ttf

filename.arial_bold=arialbd.ttf

filename.arial_italic=ariali.ttf

filename.arial_bold_italic=arialbi.ttf

filename.courier_new=cour.ttf

filename.courier_new_bold=courbd.ttf

filename.courier_new_italic=couri.ttf

filename.courier_new_bold_italic=courbi.ttf

filename.times_new_roman=times.ttf

filename.times_new_roman_bold=timesbd.ttf

filename.times_new_roman_italic=timesi.ttf

filename.times_new_roman_bold_italic=timesbi.ttf

filename.wingdings=wingding.ttf

filename.symbol=symbol.ttf

# missing glyph character

#

default.char=2751

# component font character encodings

#

fontcharset.dialog.1=sun.io.chartobytegbk

fontcharset.dialog.2=sun.awt.windows.chartobytewingdings

fontcharset.dialog.3=sun.awt.chartobytesymbol

fontcharset.dialoginput.1=sun.io.chartobytegbk

fontcharset.dialoginput.2=sun.awt.windows.chartobytewingdings

fontcharset.dialoginput.3=sun.awt.chartobytesymbol

fontcharset.serif.1=sun.io.chartobytegbk

fontcharset.serif.2=sun.awt.windows.chartobytewingdings

fontcharset.serif.3=sun.awt.chartobytesymbol

fontcharset.sansserif.1=sun.io.chartobytegbk

fontcharset.sansserif.2=sun.awt.windows.chartobytewingdings

fontcharset.sansserif.3=sun.awt.chartobytesymbol

fontcharset.monospaced.0=sun.io.chartobytegbk

fontcharset.monospaced.1=sun.io.chartobytegbk

fontcharset.monospaced.2=sun.awt.windows.chartobytewingdings

fontcharset.monospaced.3=sun.awt.chartobytesymbol

# exclusion ranges

#

exclusion.dialog.0=0100-20ab,20ad-f8ff

exclusion.dialoginput.0=0100-20ab,20ad-f8ff

exclusion.serif.0=0100-20ab,20ad-f8ff

exclusion.sansserif.0=0100-20ab,20ad-f8ff

exclusion.monospaced.0=0100-20ab,20ad-f8ff

# text input character set

#

inputtextcharset=gb2312_charset

需要说明一点,jb使用的是自己带的jre,而不是系统中的jre,所以要修改jb安装目录下jdk目录中jre/lib中的font.properties文件才有效。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » jb中的光标问题-JSP教程,开发工具
分享到: 更多 (0)

相关推荐

  • 暂无文章