在java.awt.graphics中使用drawString()时如何使用多种颜色?

时间:2014-05-11 09:35:58

标签: java graphics

好的,这就是问题所在。

g.setColor(Color.WHITE);
g.drawString("all your base belong to us",x,y);

以下代码使得显示的字符串为白色且全白。

我的目标是制作字符串的某个部分,例如,我希望该字符串中的“base”一词是不同的颜色,在这种情况下为黄色。

我最有可能使用的代码是:

g.drawString("all your #ffd700base belong to us",x,y);

该代码尝试将文本从“base”设置为黄色一直到句子的末尾。

虽然输出是:

http://i.stack.imgur.com/lB2WC.png

忽略背景,只看字符串。 “#ffd700”成为字符串的一部分,然后显示。

这不起作用,我找不到解决办法。

1 个答案:

答案 0 :(得分:0)

这里解决了同样的问题。请看下面的帖子:

上面链接中提到的代码中的一些更改后的示例代码:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.CellRendererPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class PaintComponentTest extends JPanel {

    private static final String s = "<html>all your <font color=\"#ffd700\">base</font> belong to us</html>";
    private JLabel renderer = new JLabel(s);
    private CellRendererPane crp = new CellRendererPane();
    private Dimension dim;

    public PaintComponentTest() {
        this.setBackground(Color.lightGray);
        dim = renderer.getPreferredSize();
        this.add(crp);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        renderer.setForeground(Color.WHITE);
        crp.paintComponent(g, renderer, this, 10, 10, dim.width, dim.height);
    }

    private void display() {
        JFrame f = new JFrame("PaintComponentTest");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(this);
        f.pack();
        f.setSize(200, 70);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new PaintComponentTest().display();
            }
        });
    }
}

截图:

enter image description here