我正在尝试在使用 swing 绘制的字符串中强调一项工作。
有人建议我使用带有以下代码的 HTML:
Graphics2D g2 = (Graphics2D) g;
g.drawString("this is something I want people to <p color="#00FF00">NOTICE</p>", x, y);
我试过这个但没有运气......它只是输出HTML
谁能指出我正确的方向?
我正在尝试在使用 swing 绘制的字符串中强调一项工作。
有人建议我使用带有以下代码的 HTML:
Graphics2D g2 = (Graphics2D) g;
g.drawString("this is something I want people to <p color="#00FF00">NOTICE</p>", x, y);
我试过这个但没有运气......它只是输出HTML
谁能指出我正确的方向?
这是如何编译的: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)
sGraphic
对象:
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>");
完整示例:
注意正如你所看到的,通知在它自己的行上,这是因为段落标签而不是使用字体标签将它放在一行上,如下所示:
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()更改您所做的任何事情的颜色。或使用 aJLabel
设置颜色。
使用 aJLabel
作为样式文本。请参阅LabelRenderTest以了解如何将其绘制到图像并用于绘画。
Graphics
/AWT 方法字符串暗示NOTICE
应该是绿色,但其余默认(黑色)。我们需要drawString(String)
使用字符串两部分的颜色调用两次,将后一个字符串偏移第一个字符串的宽度。要获得宽度,请查看类似FontMetrics
或 a 的内容GlyphVector
。 这个答案使用 aGlyphVector
来获得字母的轮廓。
如果您只是创建一个强调单词的简单标签,您可以直接将 HTML 分配到JLabel
这样的...
JLabel label = new JLabel("<html>this is something I want people to <p color='#00FF00'>NOTICE</p>");
只要您<html>
在 a 的 String 开头有一块JLabel
,它就会使用 HTML 渲染器来绘制它。
然而,正如@AndrewThompson 所指出的那样,这<p>
将迫使彩色文本换行,所以也许<span>
更合适......
JLabel label = new JLabel("<html>this is something I want people to <span style='color:#00FF00;'>NOTICE</span>");
你可以在 g.drawString() 之前使用 g.setColor(Color.BLUE)。(例如 Color.BLUE)
您可以添加 g.setColor(Color.Chosen Color); 然后用 g.drawString() 写出字符串