每个人都知道使用专有API这是一件非常糟糕的事情。几乎在所有情况下,您都可以使用自己的实现或其他库替换该API。
几乎...
在这种情况下,您无法找到任何替代方案:
table.put ( SwingUtilities2.AA_TEXT_PROPERTY_KEY, SwingUtilities2.AATextInfo.getAATextInfo ( true ) );
这行代码将正确的文本抗锯齿设置放入L& F默认表中。如果你不使用这些设置,你会在任何文本组件中呈现一些特定的符号(例如 - “ข้อความที่เรียบง่าย”或阿拉伯语 - “رسالةنصيةبسيطة”)时会遇到很多问题。
它不能被其他东西替换,因为在文本呈现中,在Swing体系结构中使用AATextInfo的实例(是的,完全是那个类,而不是其他东西),而Look and Feel只是将该实例添加到默认值中,以便组件可以使用它。
所以这就是我必须决定的地方 - 要么在我的L& F中有非常糟糕的泰国/阿拉伯语/其他字体渲染,要么使用该死的proprietari API。
正如您可能知道的那样 - 警告如:
XXX是Sun专有API,可能会在将来的版本中删除
无法抑制:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6476630
嗯,这实际上是一个合理的限制所以它不是问题。
问题是 - 为什么我不能用其他东西取代那该死的东西呢? 也许我错过了什么?
当然,只有在您尝试创建自己的L& F时才会出现问题,否则您将无需在任何地方使用该问题。
所以问题是:
该渲染功能是否有替换/解决方法?
答案 0 :(得分:0)
使用java.awt.RenderingHints,它没有发出警告。
final Map<Object, Object> hints = new HashMap<Object, Object>();
hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
hints.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
...
public static Map<Object, Object> setHints(Graphics2D g, Map<Object, Object> hints) {
final RenderingHints rhints = g.getRenderingHints();
for (final Map.Entry<Object, Object> entry : hints.entrySet()) {
if (!(entry.getKey() instanceof RenderingHints.Key)) {
continue;
}
final RenderingHints.Key key = (RenderingHints.Key) entry.getKey();
final Object value = rhints.get(key);
if (entry.getValue() == null) {
rhints.remove(key);
}
else {
rhints.put(key, entry.getValue());
}
entry.setValue(value);
}
return hints;
}