Изменение цвета текста в Drawstring()

Я пытаюсь добавить акцент на одну работу в строке я рисую, используя качели.

Мне посоветовали использовать HTML со следующим кодом:

Graphics2D g2 = (Graphics2D) g;
g.drawString("this is something I want people to <p color="#00FF00">NOTICE</p>", x, y);

Я попробовал это, но не повезло... он просто выводит HTML

Может кто-то указать мне верное направление?

6 ответов

Решение
  • Как это компилируется: g.drawString("this is something I want people to <p color="#00FF00">NOTICE</p>", x, y); поскольку "" - это специальный символ, мы должны экранировать его с помощью \

  • Вы преобразуете в Graphics2D, но не используете его (не относится к проблеме, но может вызвать аномалии).

Так должно быть:

Graphics2D g2 = (Graphics2D) g;
g2.drawString("this is something I want people to <p color=\"#00FF00\">NOTICE</p>", x, y);

чтобы добавить цвет просто позвоните setColor(Color c) на Graphic s объект:

g2.setColor(Color.GREEN);

Однако при этом вся строка будет отображаться зеленой, если вы хотите, чтобы только части отображались зеленым. JLabel для поддержки HTML (до HTML3.2):

JLabel label = new JLabel("<html>this is something I want people to <p color=\"#00FF00\">NOTICE</p></html>");

полный пример:

NB. Как видите, уведомление находится на отдельной строке, поэтому из-за тега абзаца лучше использовать тег font, чтобы получить его в одной строке, например:

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test {

    public Test() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel label = new JLabel("<html>this is something I want people to <p color=\"#00FF00\">NOTICE</p></html>");

        // JLabel label = new JLabel("<html>this is something I want people to <font color=\"#00FF00\">NOTICE</font></html>");//will be shown on single line

        frame.add(label);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Test();
            }
        });
    }
}

Используйте Graphics.setColor(), чтобы изменить цвет всего, что вы делаете. Или используйте JLabel установить цвет.

Использовать JLabel для стилизованного текста. См. LabelRenderTest о том, как его можно нарисовать на изображении и использовать в рисовании.

С помощью Graphics/AWT методы

Строка подразумевает NOTICE должен быть зеленым, а остальное по умолчанию (черным). Нам нужно будет позвонить drawString(String) дважды с цветами двух частей строки, смещая последнюю строку на ширину первой. Чтобы получить ширину, смотрите такие вещи, как FontMetrics или GlyphVector, Этот ответ использует GlyphVector чтобы набросать буквы.

Если вы просто создаете простой ярлык с акцентом на слове, вы можете просто назначить HTML прямо на JLabel как это...

JLabel label = new JLabel("<html>this is something I want people to <p color='#00FF00'>NOTICE</p>");

Пока у вас есть <html> кусок в начале строки для JLabel, он будет использовать визуализатор HTML, чтобы нарисовать его.

Как отмечает @AndrewThompson, однако, <p> переместит цветной текст на новую строку, так что, возможно, <span> было бы более уместным...

JLabel label = new JLabel("<html>this is something I want people to <span style='color:#00FF00;'>NOTICE</span>");

Вы можете использовать g.setColor(Color.BLUE) перед g.drawString(). (Например, Color.BLUE)

Вы можете добавить g.setColor(Color.Chosen Color), а затем записать строку с помощью g.drawString()

Другие вопросы по тегам