gpt4 book ai didi

java - 寻找 Swing 文本 AA 属性替换

转载 作者:行者123 更新时间:2023-12-02 08:40:22 24 4
gpt4 key购买 nike

每个人都知道使用专有 API 是一件非常糟糕的事情。在几乎所有情况下,您都可以用您自己的实现或一些附加库替换该 API。

几乎...

在以下情况下您找不到任何替代方案:

table.put ( SwingUtilities2.AA_TEXT_PROPERTY_KEY, SwingUtilities2.AATextInfo.getAATextInfo ( true ) );

这行代码将正确的文本抗锯齿设置放入 L&F 默认表中。如果您不使用这些设置,则在任何文本组件中渲染某些特定符号时都会遇到很多问题(例如泰语 - “ข้อความที่เรียบง่าย”,或阿拉伯语 - “?????????”)。

它不能用其他东西替换,因为当涉及文本渲染时,AATextInfo 的实例(是的,正是那个类,而不是其他东西)在 Swing 架构中使用,而外观和感觉只是将该实例添加到默认值中,以便组件可以使用它。

所以现在我必须做出决定 - 要么在我的 L&F 中使用非常非常糟糕的泰语/阿拉伯语/其他字体渲染,要么使用该死的专有 API。

正如您可能知道的那样 - 警告如下:

XXX is Sun proprietary API and may be removed in a future release

无法抑制:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6476630
嗯,这实际上是一个合理的限制,所以它不是问题。

问题是 - 为什么我不能用其他东西代替那个该死的东西?
也许我错过了什么?

当然,只有当您尝试创建自己的 L&F 时才会出现问题,否则您永远不需要在任何地方使用该东西。

所以问题是:
该渲染功能是否有任何替代/解决方法?

最佳答案

使用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;
}

关于java - 寻找 Swing 文本 AA 属性替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18591139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com