Как я могу получить предполагаемое разрешение экрана Java2D? - PullRequest
0 голосов
/ 27 августа 2018

Я использую Swing и Java2D на компьютере под управлением Windows 7 с Java 8, и у меня возникают проблемы с отображением моих шрифтов в java, которые намного меньше, чем они должны учитывать их размер шрифта и мое разрешение экрана.

Согласно этой старой статье причиной может быть разница между моим разрешением экрана и предполагаемым разрешением экрана Java2D. Автор Томас Краммер предлагает следующий обходной путь:

public void paintComponent(Graphics g)
{
    Graphics2D g2d = (Graphics2D)g;

    int screenRes = Toolkit.getDefaultToolkit().getScreenResolution();
    int fontSize = (int)Math.round(12.0 * screenRes / 72.0);

    Font font = new Font("Arial", Font.PLAIN, fontSize);

    g2d.setFont(font);
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g2d.drawString("Hello World", 25, 100);
}

В моем случае это работает хорошо. Тем не менее, я бы очень хотел избежать жесткого кодирования 72 dpi в мою программу, а вместо этого получить его оттуда, где он возник.

Кто-нибудь знает, как получить это предполагаемое разрешение от Java2D?

Заранее спасибо.

Edit:
минимальный рабочий пример:

package fontmagic;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class FontMagic
{
  public static void main(String[] args)
  {
    JFrame frame = new JFrame("Font Magic");
    JPanel panel = new JPanel(new BorderLayout());
    JLabel label = new JLabel("This is Text with a font size.");

    frame.setSize(new Dimension(400, 200));
    frame.setVisible(true);
    frame.add(panel);
    panel.add(label, BorderLayout.CENTER);
    label.setFont(new Font("Arial", Font.PLAIN, 12));
  } 
}

Этот код генерирует текст размером 9 пикселей на моем экране.

Когда я пишу текст в MS Office, Libre Office или Scribus с помощью Arial, 12pt и масштабирую его до 100%, в результате получается высота экрана 12 пикселей.

Удивительно, но я только что узнал, что текст в gimp с Arial, 12pt также приводит к высоте 9 пикселей. Так может это вообще не проблема Java?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...