有的值,因此它提供了实现可选参数的多个构造器。 当使用 setAccessibleValues 方法时,最好使用这个方法而不是组件的普通方法来设置 组件的文本(如果有的话)。清单 6 说明了如何使用 setAccessibleValues 方法设置按 钮组件的值:
清单 6. 按钮组件的 setAccessibleValues
JButton b = new JButton();
AccessibleUtils.setAccessibleValues(null, (Accessible)b,
new AccessibleUtils.AccessibleValues(
"button1",
"OK",
"OK Button",
"Activate to commit changes and continue",
"Commit changes",
(int)''O'');
尽管清单 6 中的代码与 清单 2中的按钮序列所做的事情相同,但它有下列优点:
如果遗漏了必需的参数,则 setAccessibleValues() 语法会强制产生一个错误。
setAccessibleValues() 方法比清单 2 中的按钮序列更简洁(如果将所有参数都放到 一行中,该方法甚至只需较少几行就可以了)。
因为调用了一个方法,该方法可以执行额外的处理和验证。
通过转换由 java.util.ResourceBundle 提供的文本,可以自动地支持国际化。
为可访问性编码: 用JFC/Swing将可访问性构建到您的Java应用(6)
时间:2011-04-03 IBM Barry A. Feigenbaum
实际使用的实用程序方法
清单 7 显示了 setAccessibleValues() 方法是如何工作的。首先研究代码,然后查 看后面的注释。
清单 7. 实际使用的 setAccessibleValues()
protected static final Class[] _sType = {String.class};
protected static final Class[] _iType = {Integer.TYPE};
:
Accessible setAccessibleValues(
ResourceBundle rb, Accessible a, AccessibleValues av) {
if ( av.name != null ) {
throw new NullPointerException(
"accessible components require a name");
}
if ( a instanceof Component ) { // nearly always true
((Component)a).setName(av.name);
}
if ( av.text != null ) {
Method m = resolveMethod(a, "setText", _sType);
try {
invokeMethod(a, m, new String[] {resolveString(rb, av.text)});
}
catch ( Exception e ) {
throw new AccessibleException(
"cannot invoke method setText(String text) - " + a, e);
}
}
if ( av.borderText != null ) {
JComponent c = (JComponent)a;
Border b = c.getBorder();
Border tb = new TitledBorder(resolveString(rb, av.borderText));
c.setBorder(b != null ? new CompoundBorder(b, tb) : tb);
}
if ( av.toolTip != null ) {
String text = resolveString(rb, av.toolTip.equalsIgnoreCase ("=ld")
? av.longDescription : av.toolTip);
if ( a instanceof JComponent ) {
((JComponent)a).setToolTipText(text);
}
else if ( a instanceof ImageIcon ) {
((ImageIcon)a).setDescription(text);
}
}
if ( av.mnemonic >= 0 ) {
Method m = resolveMethod(a, "setMnemonic", _iType);
if ( m == null ) {
m = resolveMethod(a, "setDisplayedMnemonic"
|