Как получить размер строки, когда он отображается в виде HTML? - PullRequest
1 голос
/ 20 апреля 2019

В настоящее время я разрабатываю новый внешний вид и чувствую, и мне пришлось начинать с нуля по многим причинам, сейчас моя самая большая проблема - получить ширину и высоту строки в компонентах, которые имеют getText(), чтобы определить, где это должно быть нарисовал, и я знаю, как получить его для обычного текста, но как это сделать, если он отображается как HTML-текст ??.

использование FontMetrics действительно предоставило все, что нужно для простого текста, но использование его для html дает, как если бы оно было простым, поэтому я попробовал View.getGraphics() и проделал то же самое с FontMetrics объекта представления графика, но все та же, в то время как я хочу, чтобы размер текста был нарисован (различия, которые имеют значение, например, если он содержит <br /> высота не будет точной! или если шрифт изменяется в HTML-тегах и т. д .. .).

    public Dimension getTextSize(JComponent c, Graphics g, String text) {
        //this works if you want to get the size as if it's plain text
        //and later in the drawing calculate the descent line distance to draw the text
        g.setFont(c.getFont());
        FontMetrics fontMetrics = g.getFontMetrics();
        Dimension plaintTextSize = new Dimension(fontMetrics.stringWidth(text),fontMetrics.getHeight());
        return plaintTextSize;
    }

я пробовал выше с

View view = (View) JComponent.getClientProperty(BasicHTML.propertyKey);

и передать view.getGraphics() методу getTextSize, но все тот же. Я много искал об этом, но не смог найти никаких относительных результатов, и я ничего не узнал о том, какой класс использовать, и я могу не используйте TextLayout, поскольку иногда JComponent может не быть JTextComponent. Пожалуйста, помогите и спасибо.

Редактировать

кажется, что это почти невозможное, потому что другое решение будет с View.getPreferredSpan(int axsis), чтобы получить размер, но когда-то ненадежно масштабировать размер, я имею в виду, что в компонентах мы можем предсказать это конфликт, но как предсказать это в HTML-строке, нарисованной BasicHTML, чтобы хотя бы обработать размер вручную.

Ответы [ 2 ]

1 голос
/ 20 апреля 2019

Я не пытался делать это более 20 лет, но, поскольку JLabel будет принимать html, попробуйте создать JLabel, используя ваш html текст, а затем получите предпочитаемый размер метки.

0 голосов
/ 22 апреля 2019

грустно обыскивая весь интернет без какого-либо удовлетворительного ответа на реальный вопрос

как получить размер строки, когда она отображается как HTML?

но другой вопрос после редактирования о том, как получить разницу между реальным размером и предпочтительным размером представления, используя

View.getPreferredSpan(int axsis);

что возвращаемый размер даст размер напечатанного содержимого, а не нарисованного лайк если текст был

<html> 
  <body>
     first line<br />
     second line <hr />
     third line
  </body>
</html>

будет использоваться размер

View.getPreferredSpan(int axsis);

, чтобы получить размер текста предложений первой, второй и третьей строк, но он будет использовать параметр Rectangle, чтобы определить конец этой строки <hr />.

...