Java получить размер шрифта с учетом высоты

Есть ли (аккуратный) способ вместо получения высоты определенного размера шрифта получить размер шрифта определенного шрифта (в данном случае без засечек), который создает заданную высоту?

Я мог бы, конечно, перебирать размеры шрифтов или использовать какую-то форму бинарной отбивки, но, если возможно, я хотел бы использовать что-то более чистое и менее ресурсоемкое. Лучший способ, который я нашел, это использовать что-то вроде этот.


person Michael Berry    schedule 25.08.2011    source источник


Ответы (3)


При поиске отображается TextLayout. здесь и здесь, обеспечит самые узкие границы для данного текста.

person trashgod    schedule 25.08.2011

Нет простого пути.

Во-первых, вы знаете, что java предоставляет всего пять логических семейств шрифтов. Наличие всех других шрифтов в системе, в которой вы будете запускать программу, не гарантируется.

Тогда нет, в вашей системе нет автоматического сопоставления свойств шрифтов. Вам придется загрузить их все и выполнить циклический поиск необходимой меры.

с помощью этого кода вы можете зацикливать доступные шрифты:

import java.awt.Font;
import java.awt.GraphicsEnvironment;
public class MainClass {
  public static void main(String[] a) {
    GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
    Font[] fonts = e.getAllFonts(); // Get the fonts
    for (Font f : fonts) {
      System.out.println(f.getFontName());
    }
  }
}

а затем выберите тот, который соответствует вашим потребностям. Измените код, чтобы отобразить нужную информацию: например, вес.

Изменить: обратите внимание на наблюдение They are merely font-type names recognized by the Java runtime which must be mapped to some physical font that is installed on your system в http://download.oracle.com/javase/1.3/docs/guide/intl/addingfonts.html.

Даже логические шрифты не всегда одинаковы. Что вы можете сделать, так это получить размер 10pt и рассчитать размер шрифта. Нравится

font_size_in_points = ((10 * требуемая_мера) / эквивалентная_мера_из_10pt)

person woliveirajr    schedule 25.08.2011
comment
Я не беспокоюсь о доступности семейств, так как я всегда использую SansSerif, который является одним из 5. Я просто ищу способ получить размер шрифта этого конкретного шрифта, который максимально соответствует заданной высоте. Если бы это был случай выбора размера шрифта во время компиляции, я бы сделал это статически, как вы предлагаете, но мне нужно иметь возможность сделать это с учетом определенной высоты во время выполнения. - person Michael Berry; 25.08.2011

FontMetrics metric = new FontMetrics(new Font("font"), Font.BOLD, 12);
metrics.getHeight()

Может быть, то, что вы ищете.

Дополнительная информация: http://download.oracle.com/javase/6/docs/api/java/awt/FontMetrics.html

person isakkarlsson    schedule 25.08.2011
comment
Нет - это даст мне высоту определенного шрифта (легко!). Я хочу пойти наоборот и получить определенный размер шрифта с учетом высоты, которую я хочу. - person Michael Berry; 25.08.2011