【问题标题】:Ugly font rendering in SwingSwing中丑陋的字体渲染
【发布时间】:2013-09-25 08:36:00
【问题描述】:

有没有办法改进 Swing JTextFields 中的字体渲染?这是我现在得到的:

如您所见,它看起来非常参差不齐。有什么办法可以改善吗?我正在使用 GTKLookAndFeel,以防万一有人需要知道。

(我看了this的问题,但没有多大帮助。)

SSCCE:

public class foo extends JFrame{

  foo(){
    add(new JTextField);
    setVisible(true);
  }

}

我在 Linux 上,所以这可能与它有关。我在 linux 中使用 Infinality 来获得更好的字体。

【问题讨论】:

  • 从我所读到的,关于你现在可能实现这一点的唯一方法是在绘制组件时直接将 RenderingHints 应用到组件,这真的很混乱
  • 请编辑您的问题以包含一个sscce,以展示您说明的问题。还可以考虑使用默认字体。
  • @trashgod -- 我刚刚添加了一个。
  • 关于 Infinality 字体的更多细节?
  • 这是我用来启动它的命令:sudo /etc/fonts/infinality/infctl.sh setstyle linux。所以我只是使用默认的 Linux 预设。

标签: java swing fonts gtk look-and-feel


【解决方案1】:

使用下面的 sscce,我看到 GTK+ L&F 的以下外观。

附录:作为一种解决方法,您可以尝试设置 UI 委托属性,例如,

JTextField tf = new JTextField();
UIManager.put("TextField.font", tf.getFont().deriveFont(Font.BOLD));

import component.Laf;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

/** @see http://stackoverflow.com/a/18969361/230513 */
public class Test {

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(0, 1));
        // http://stackoverflow.com/a/11949899/230513
        f.add(Laf.createToolBar(f));
        f.add(new JTextField("bla@foo.com"));
        f.add(new JPasswordField("*****"));
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Test().display();
            }
        });
    }
}

【讨论】:

  • 嗯...嗯,我也在 Ubuntu 上,但我不在 Unity 上。我正在使用 Openbox。不是因为我必须这样做,而是因为我喜欢它。我猜 Openbox 可能是问题所在。
  • 我不确定 IcedTea 如何处理 Freetype。
  • 嗯。我想我现在可以忍受它。
  • 以上建议的实验方法。
【解决方案2】:

要获得一个令人窒息的文本,您应该启用抗锯齿:

$ java -jar lib/application.jar -Dswing.aatext=true

【讨论】:

  • 我认为他们在 Java 5 和 6 更好的地方停止使用此参数?
  • 令人惊讶地向 netbeans 传递了类似的参数,使它完美地呈现字体,但是,当我从命令行使用它来运行我的应用程序时(就像你展示的那样),我发现我的 Swing UI 没有任何影响... :(
【解决方案3】:

使用此代码,您可以更改 JTextArea 中的字体和字体颜色。

我们创建了一个名为 txt 的 JTextArea。只需几行简单的代码,您就可以更改其字体、颜色和大小设置:

Font font = new Font("Verdana", Font.BOLD, 12);
txt.setFont(font);
txt.setForeground(Color.BLUE);

Font 类中有多种字体设置,包括 PLAIN、BOLD、ITALIC 和 Color 类中的 13 种不同颜色(如下所列)。

  • 黑色
  • 蓝色
  • 青色
  • DARK_GRAY
  • 灰绿
  • 浅灰色
  • 洋红色
  • 橙色
  • 粉色
  • 红色
  • 白色
  • 黄色

【讨论】:

  • 嗯...谢谢,但我不确定这对我有什么帮助。我正在寻找一种在 JTextField 中获得更平滑字体的方法,而不是更改其格式。
  • 问题是关于抗锯齿,而不是设置颜色。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 2012-09-07
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多