Я не могу заставить JavaFX GraphicsContext strokeText () правильно отображать моноширинные шрифты - PullRequest
0 голосов
/ 02 мая 2020

Вопрос: Я бы хотел, чтобы объект GraphicContext обводил текст моноширинным шрифтом. Как этого достичь?

Проблема: Я использую JavaFX. У меня есть объект Canvas и объект GrahpicsContext. Я хочу использовать метод strokeText () GraphicsContext для рисования текста на холсте. Перед вызовом strokeText () я использую setFont () объекта GraphicsContext, чтобы установить шрифт в моноширинный шрифт. Важно, чтобы все символы в строке, которые я хочу нарисовать на холсте, имели одинаковую ширину. Я попытался нарисовать текст на холсте шрифтами Courier, Courier New и Monospace. Я понял, что эти шрифты должны быть моноширинными. Я импортировал javafx.scene.text.Font.

Однако, когда я проверяю текст, нарисованный на холсте, я вижу это каждый раз: Снимок экрана левого угла моего объекта canvas.

Чтобы проверить шрифты, я сделал объект GraphicsContext, состоящий из 5 символов «_», «a», «i» и «W», каждый в своей строке. Символы не имеют одинакового размера, а строки имеют разную длину. Кроме того, я не вижу никаких изменений в шрифте.

Вот код, который я использую для создания холста, выдвижного ящика и поглаживания текста:

Canvas canvas = new Canvas(800,200);
GraphicsContext drawer = canvas.getGraphicsContext2D();
drawer.setFill(Color.BLACK);
drawer.setFont(new Font("Monospaced",15));

drawer.strokeText("_____", 5, 5);
drawer.strokeText("aaaaa", 5, 25);
drawer.strokeText("iiiii", 5, 45);
drawer.strokeText("WWWWW", 5, 65);

Я искал информацию о моноширинные шрифты в java, попытался импортировать java .awt.Fonts и просмотрел javado c GraphicsContext, но, похоже, ничего не помогло мне с этой проблемой.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

new Font(String name, double size) создает шрифт на основе полного имени шрифта и размера шрифта . Font.font(String family, double size) создает шрифт на основе имени семейства шрифтов и размера шрифта .

В вашем случае фамилия "Monospaced" (java.awt.Font.MONOSPACED), полное имя "Monospaced Regular", а имя файла на моей Windows платформе C:\Windows\Fonts\cour.ttf (Courier New).

Я предпочитаю

drawer.setFont(Font.font("Monospaced", 15));

, но

drawer.setFont(new Font("Monospaced Regular", 15));

и

drawer.setFont(Font.loadFont(Files.newInputStream(Paths.get("C:/Windows/Fonts/cour.ttf")), 15));

тоже работает.

0 голосов
/ 02 мая 2020

Я отвечу на свой вопрос здесь, так как я нашел способ решить эту проблему. Я не знаю, что вызывает эту проблему, поэтому ответы все еще более чем приветствуются. Тем не менее, это, казалось, лекарство:

drawer.setFont(Font.font(java.awt.Font.MONOSPACED,15));

Большое спасибо!

...