Изменение цвета текста в 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()