Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java7中使用分馏矩阵呈现文本_Java_Swing_Java 7_Java 2d_Text Rendering - Fatal编程技术网

如何在Java7中使用分馏矩阵呈现文本

如何在Java7中使用分馏矩阵呈现文本,java,swing,java-7,java-2d,text-rendering,Java,Swing,Java 7,Java 2d,Text Rendering,我有一个正在开发的桌面Java应用程序,一直在使用JDK 6通过IDE进行开发。我使用上的呈现提示VALUE\u partialmetrics\u以及其他提示来更好地呈现jlabel中的文本。这些提示在JVM 1.6上运行得很好,但我最近注意到,当我使用JRE 1.7运行应用程序时,它似乎完全忽略了值

我有一个正在开发的桌面Java应用程序,一直在使用JDK 6通过IDE进行开发。我使用上的呈现提示
VALUE\u partialmetrics\u以及其他提示来更好地呈现jlabel中的文本。这些提示在JVM 1.6上运行得很好,但我最近注意到,当我使用JRE 1.7运行应用程序时,它似乎完全忽略了
,我是否在这里做了一些错误,使Java 7忽略了这些提示

lblDate = new ATimeLabel(ATimeLabel.DATE_LETTERS) {
    private static final long serialVersionUID = 1L;

    @Override
    protected void paintComponent(Graphics g) {

        Graphics2D g2d = (Graphics2D) g;

        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
                RenderingHints.VALUE_RENDER_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
                RenderingHints.VALUE_FRACTIONALMETRICS_ON);

        super.paintComponent(g2d);
    }
};
分馏技术在文本上有着最大的显著视觉效果,所以让它发挥作用是我想要做的

下面是一个屏幕截图,比较了当我从使用Java 6的IDE()运行应用程序和双击Jar文件本身()时(使用我的系统JRE,Java 7)的情况。 (我还临时添加了红色边框,以表明绘制方法确实有效)


非常感谢您的帮助。

通常无需在
上设置
值。尝试使用提供的桌面提示。您还可以从FontRenderContext中再次检查Swing抗锯齿提示。使用示例如下所示

如果您希望加粗文本(这是分数度量的副作用),我更喜欢使用加粗字体,或者将输出渲染为图像,并在绘制之前将其模糊。这将确保一个独立于系统的解决方案

import java.awt.*;
import java.awt.event.*;
import java.util.Map;
import javax.swing.JLabel;

public class TextHints {
    public static void main(String[] args) {
        Frame frame = new Frame();
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        JLabel label = new JLabel("Sunday, March 17") {
            @Override
            protected void paintComponent(Graphics g) {

                Graphics2D g2d = (Graphics2D) g;

                Map desktopHints = (Map) Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints");
                if (desktopHints != null) {
                    g2d.addRenderingHints(desktopHints);
                    System.out.println("Desktop: " + desktopHints);
                }
                java.awt.FontMetrics fm = getFontMetrics(getFont());
                Object swingHint = fm.getFontRenderContext().getAntiAliasingHint();
                System.out.println("Swing AntiAliasingHint: " + swingHint);

                super.paintComponent(g2d);
            }
        };
        label.setBackground(Color.BLACK);
        label.setForeground(Color.LIGHT_GRAY);
        label.setOpaque(true);

        label.setFont(label.getFont().deriveFont(Font.BOLD, 14f));

        frame.add(label);
        frame.setSize(new Dimension(160, 100));
        frame.setVisible(true);
    }
}

这似乎不起作用。我不是想让它变厚,我只是想让它变得锋利和干净。这确实使它看起来像正确的图像。我想让它看起来像左边的图像,这是有点瘦。我正在寻找亚像素的字体渲染。但这似乎只是Java6。。。