10

我正在尝试在使用 swing 绘制的字符串中强调一项工作。

有人建议我使用带有以下代码的 HTML:

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

我试过这个但没有运气......它只是输出HTML

谁能指出我正确的方向?

4

6 回答 6

13
  • 这是如何编译的: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();
            }
        });
    }
}
于 2012-12-10T13:31:44.630 回答
4

使用Graphics.setColor()更改您所做的任何事情的颜色。或使用 aJLabel设置颜色。

于 2012-12-10T13:26:09.020 回答
4

使用 aJLabel作为样式文本。请参阅LabelRenderTest以了解如何将其绘制到图像并用于绘画。

使用Graphics/AWT 方法

字符串暗示NOTICE应该是绿色,但其余默认(黑色)。我们需要drawString(String)使用字符串两部分的颜色调用两次,将后一个字符串偏移第一个字符串的宽度。要获得宽度,请查看类似FontMetrics或 a 的内容GlyphVector这个答案使用 aGlyphVector来获得字母的轮廓。

于 2012-12-10T13:26:14.723 回答
3

如果您只是创建一个强调单词的简单标签,您可以直接将 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>");
于 2012-12-10T13:24:09.697 回答
2

你可以在 g.drawString() 之前使用 g.setColor(Color.BLUE)。(例如 Color.BLUE)

于 2012-12-10T13:32:34.723 回答
-2

您可以添加 g.setColor(Color.Chosen Color); 然后用 g.drawString() 写出字符串

于 2014-02-03T23:47:29.847 回答