java.lang.Object
java.awt.font.NumericShaper
- 所有实现的接口:
-
Serializable
NumericShaper类用于将拉丁-1(欧洲)数字转换为其他Unicode十进制数字。使用此类的用户主要是希望使用国家数字形状呈现数据的人,但发现使用拉丁-1(欧洲)数字在内部表示数据更方便。这不会解释已弃用的数字形状选择器字符(U+206E)。
NumericShaper的实例通常作为TextAttribute类的NUMERIC_SHAPING属性应用于文本。例如,此代码片段使TextLayout在阿拉伯语环境中将欧洲数字形状为阿拉伯数字:
Map map = new HashMap();
map.put(TextAttribute.NUMERIC_SHAPING,
NumericShaper.getContextualShaper(NumericShaper.ARABIC));
FontRenderContext frc = ...;
TextLayout layout = new TextLayout(text, map, frc);
layout.draw(g2d, x, y);
还可以使用
NumericShaper的实例显式执行数字形状,如下代码片段所示:
char[] text = ...;
// 将所有欧洲数字(零除外)形状为阿拉伯数字
NumericShaper shaper = NumericShaper.getShaper(NumericShaper.ARABIC);
shaper.shape(text, start, count);
// 如果前面的文本是阿拉伯文,则将欧洲数字形状为阿拉伯数字,或者
// 如果前面的文本是泰米尔文,则将欧洲数字形状为泰米尔数字,或者
// 如果没有前面的文本,或者
// 前面的文本既不是阿拉伯文也不是泰米尔文,则保留欧洲数字不变
NumericShaper shaper =
NumericShaper.getContextualShaper(NumericShaper.ARABIC |
NumericShaper.TAMIL,
NumericShaper.EUROPEAN);
shaper.shape(text, start, count);
基于位掩码和枚举的Unicode范围
此类支持两种不同的编程接口来表示特定脚本数字的Unicode范围:基于位掩码的接口,如NumericShaper.ARABIC,和基于枚举的接口,如NumericShaper.Range.ARABIC。可以通过OR位掩码常量指定多个范围,例如:
或使用NumericShaper.ARABIC | NumericShaper.TAMIL
NumericShaper.Range常量创建Set,例如:
基于枚举的范围是基于位掩码的范围的超集。EnumSet.of(NumericShaper.Range.ARABIC, NumericShaper.Range.TAMIL)
如果混合使用这两个接口(包括序列化),则Unicode范围值将映射到可能的对应值,例如从NumericShaper.ARABIC到NumericShaper.Range.ARABIC。如果指定了任何不可映射的范围值,例如NumericShaper.Range.BALINESE,则将忽略这些范围。
十进制数字优先级
一个Unicode范围可能有多组十进制数字。如果为同一Unicode范围指定了多组十进制数字集,其中一组将按照以下方式优先:
- 自1.4版本起:
- 1.4
- 参见:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumNumericShaper.Range表示具有自己十进制数字的脚本的Unicode范围。 -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int用于完整的上下文形状标识所有范围。static final int标识阿拉伯范围和十进制基数。static final int标识孟加拉范围和十进制基数。static final int标识梵文范围和十进制基数。static final int标识阿拉伯范围和扩展的阿拉伯十进制基数。static final int标识埃塞俄比亚范围和十进制基数。static final int标识拉丁-1(欧洲)和扩展范围,以及拉丁-1(欧洲)十进制基数。static final int标识古吉拉特范围和十进制基数。static final int标识果鲁穆奇范围和十进制基数。static final int标识卡纳达范围和十进制基数。static final int标识高棉范围和十进制基数。static final int标识老挝范围和十进制基数。static final int标识马拉雅拉姆范围和十进制基数。static final int标识蒙古范围和十进制基数。static final int标识缅甸范围和十进制基数。static final int标识奥里亚范围和十进制基数。static final int标识泰米尔范围和十进制基数。static final int标识泰卢固范围和十进制基数。static final int标识泰语范围和十进制基数。static final int标识藏文范围和十进制基数。 -
Method Summary
Modifier and TypeMethodDescriptionboolean如果指定的对象是NumericShaper的实例并且与此实例形状相同,则返回true,无论范围表示、位掩码还是枚举如何。static NumericShapergetContextualShaper(int ranges) 为提供的Unicode范围返回上下文形状器。static NumericShapergetContextualShaper(int ranges, int defaultContext) 为提供的Unicode范围返回上下文形状器。static NumericShapergetContextualShaper(Set<NumericShaper.Range> ranges) 为提供的Unicode范围返回上下文形状器。static NumericShapergetContextualShaper(Set<NumericShaper.Range> ranges, NumericShaper.Range defaultContext) 为提供的Unicode范围返回上下文形状器。int返回将要形状的所有范围的值的OR结果。返回表示将要形状的所有Unicode范围的Set。static NumericShapergetShaper(int singleRange) 为提供的Unicode范围返回形状器。static NumericShapergetShaper(NumericShaper.Range singleRange) 为提供的Unicode范围返回形状器。inthashCode()返回此形状器的哈希码。boolean返回一个boolean,指示此形状器是否进行上下文形状。voidshape(char[] text, int start, int count) 转换在开始和开始+计数之间出现的文本中的数字。voidshape(char[] text, int start, int count, int context) 转换在开始和开始+计数之间出现的文本中的数字,使用提供的上下文。voidshape(char[] text, int start, int count, NumericShaper.Range context) 使用提供的上下文,转换在start和start + count之间出现的文本中的数字。toString()返回描述此形状器的String。
-
Field Details
-
EUROPEAN
public static final int EUROPEAN标识拉丁-1(欧洲)和扩展范围,以及拉丁-1(欧洲)十进制基数。- 参见:
-
ARABIC
public static final int ARABIC标识阿拉伯范围和十进制基数。- 参见:
-
EASTERN_ARABIC
public static final int EASTERN_ARABIC标识阿拉伯范围和扩展的阿拉伯十进制基数。- 参见:
-
DEVANAGARI
public static final int DEVANAGARI标识梵文范围和十进制基数。- 参见:
-
BENGALI
public static final int BENGALI标识孟加拉范围和十进制基数。- 参见:
-
GURMUKHI
public static final int GURMUKHI标识果鲁穆奇范围和十进制基数。- 参见:
-
GUJARATI
public static final int GUJARATI标识古吉拉特范围和十进制基数。- 参见:
-
ORIYA
public static final int ORIYA标识奥里亚范围和十进制基数。- 参见:
-
TAMIL
public static final int TAMIL标识泰米尔范围和十进制基数。- 参见:
-
TELUGU
public static final int TELUGU标识泰卢固范围和十进制基数。- 参见:
-
KANNADA
public static final int KANNADA标识卡纳达范围和十进制基数。- 参见:
-
MALAYALAM
public static final int MALAYALAM标识马拉雅拉姆范围和十进制基数。- 参见:
-
THAI
public static final int THAI标识泰语范围和十进制基数。- 参见:
-
LAO
public static final int LAO标识老挝范围和十进制基数。- 参见:
-
TIBETAN
public static final int TIBETAN标识藏文范围和十进制基数。- 参见:
-
MYANMAR
public static final int MYANMAR标识缅甸范围和十进制基数。- 参见:
-
ETHIOPIC
public static final int ETHIOPIC标识埃塞俄比亚范围和十进制基数。- 参见:
-
KHMER
public static final int KHMER标识高棉范围和十进制基数。- 参见:
-
MONGOLIAN
public static final int MONGOLIAN标识蒙古范围和十进制基数。- 参见:
-
ALL_RANGES
public static final int ALL_RANGES标识所有范围,用于完整的上下文形状。此常量指定所有基于位掩码的范围。使用
EnumSet.allOf(NumericShaper.Range.class)指定所有基于枚举的范围。- 参见:
-
-
Method Details
-
getShaper
返回提供的Unicode范围的形状器。所有拉丁-1(欧洲)数字将转换为相应的十进制Unicode数字。- 参数:
-
singleRange- 指定的Unicode范围 - 返回:
- 一个非上下文数字形状器
- 抛出:
-
IllegalArgumentException- 如果范围不是单一范围
-
getShaper
返回提供的Unicode范围的形状器。所有拉丁-1(欧洲)数字将转换为指定Unicode范围的相应十进制数字。- 参数:
-
singleRange- 由NumericShaper.Range常量给定的Unicode范围。 - 返回:
-
一个非上下文
NumericShaper。 - 抛出:
-
NullPointerException- 如果singleRange为null - 自:
- 1.7
-
getContextualShaper
返回提供的Unicode范围的上下文形状器。如果范围是提供的范围之一,则拉丁-1(欧洲)数字将转换为前文文本范围对应的十进制数字。多个范围通过或值在一起表示,例如,NumericShaper.ARABIC | NumericShaper.THAI。该形状器假定欧洲作为起始上下文,也就是说,如果在字符串中遇到强方向文本之前遇到欧洲数字,则假定上下文为欧洲,因此数字不会形状。- 参数:
-
ranges- 指定的Unicode范围 - 返回:
- 指定范围的形状器
-
getContextualShaper
返回提供的Unicode范围的上下文形状器。如果范围是提供的范围之一,则拉丁-1(欧洲)数字将转换为前文文本范围对应的十进制数字。该形状器假定欧洲作为起始上下文,也就是说,如果在字符串中遇到强方向文本之前遇到欧洲数字,则假定上下文为欧洲,因此数字不会形状。
- 参数:
-
ranges- 指定的Unicode范围 - 返回:
- 指定范围的上下文形状器
- 抛出:
-
NullPointerException- 如果ranges为null - 自:
- 1.7
-
getContextualShaper
返回提供的Unicode范围的上下文形状器。如果范围是提供的范围之一,则拉丁-1(欧洲)数字将转换为前文文本范围对应的十进制数字。多个范围通过或值在一起表示,例如,NumericShaper.ARABIC | NumericShaper.THAI。该形状器使用defaultContext作为起始上下文。- 参数:
-
ranges- 指定的Unicode范围 -
defaultContext- 起始上下文,例如NumericShaper.EUROPEAN - 返回:
- 指定Unicode范围的形状器。
- 抛出:
-
IllegalArgumentException- 如果指定的defaultContext不是单一有效范围。
-
getContextualShaper
public static NumericShaper getContextualShaper(Set<NumericShaper.Range> ranges, NumericShaper.Range defaultContext) 返回提供的Unicode范围的上下文形状器。如果范围是提供的范围之一,则拉丁-1(欧洲)数字将转换为前文文本范围对应的十进制数字。该形状器使用defaultContext作为起始上下文。- 参数:
-
ranges- 指定的Unicode范围 -
defaultContext- 起始上下文,例如NumericShaper.Range.EUROPEAN - 返回:
- 指定Unicode范围的上下文形状器。
- 抛出:
-
NullPointerException- 如果ranges或defaultContext为null - 自:
- 1.7
-
shape
public void shape(char[] text, int start, int count) 转换在start和start + count之间出现的文本中的数字。- 参数:
-
text- 要转换的字符数组 -
start- 开始转换的text中的索引 -
count- 要转换的text中的字符数 - 抛出:
-
IndexOutOfBoundsException- 如果start或start + count超出范围 -
NullPointerException- 如果text为null
-
shape
public void shape(char[] text, int start, int count, int context) 转换在start和start + count之间出现的文本中的数字,使用提供的上下文。如果形状器不是上下文形状器,则忽略上下文。- 参数:
-
text- 字符数组 -
start- 开始转换的text中的索引 -
count- 要转换的text中的字符数 -
context- 要将字符转换为的上下文,例如NumericShaper.EUROPEAN - 抛出:
-
IndexOutOfBoundsException- 如果start或start + count超出范围 -
NullPointerException- 如果text为null -
IllegalArgumentException- 如果这是上下文形状器且指定的context不是单一有效范围。
-
shape
转换在start和start + count之间出现的文本中的数字,使用提供的context。如果形状器不是上下文形状器,则忽略context。- 参数:
-
text- 一个char数组 -
start- 开始转换的text中的索引 -
count- 要转换的text中的char数 -
context- 要将字符转换为的上下文,例如NumericShaper.Range.EUROPEAN - 抛出:
-
IndexOutOfBoundsException- 如果start或start + count超出范围 -
NullPointerException- 如果text或context为null - 自:
- 1.7
-
isContextual
public boolean isContextual()返回一个boolean,指示此形状器是否进行上下文形状。- 返回:
-
如果此形状器是上下文形状器,则为
true;否则为false。
-
getRanges
public int getRanges()返回一个int,将所有将被塑形的范围的值进行按位或操作。例如,要检查一个塑形器是否塑形为阿拉伯语,您可以使用以下代码:
if ((shaper.getRanges() & shaper.ARABIC) != 0) { ...请注意,此方法仅支持基于位掩码的范围。对于基于枚举的范围,请调用
getRangeSet()。- 返回:
- 所有将被塑形的范围的值。
-
getRangeSet
返回一个表示将被塑形的所有Unicode范围的Set。- 返回:
- 所有将被塑形的Unicode范围。
- 自:
- 1.7
-
hashCode
public int hashCode()返回此塑形器的哈希码。 -
equals
如果指定的对象是NumericShaper的实例,并且与此对象形状相同,无论范围表示、位掩码还是枚举如何,返回true。例如,以下代码将产生"true"。NumericShaper ns1 = NumericShaper.getShaper(NumericShaper.ARABIC); NumericShaper ns2 = NumericShaper.getShaper(NumericShaper.Range.ARABIC); System.out.println(ns1.equals(ns2));
-
toString
返回描述此塑形器的String。此方法仅用于调试目的。
-